本题目理解后十分简单,小登厚脸皮写下本题。
由题易知本题有两个群体,一个是屠龙人,一个是骗子。且每个群体都有说真话或者假话的,也就意味着可以分为四个群体。本题目的是判断全部说右边是屠龙人发组合是否存在,若存在则判断骗子有几何。
想要组合存在可以理解每个人都要在满足条件下说右边为屠龙人。所有人都是在圆桌上组成一个循环,四个群体分为龙真(a),龙假(b),骗真(c),骗假(d)。从a开始说右边是屠龙人,那么a右边只能是b。b旁边可以是c或者d。若b右边是c,那么c右边只能是a。可是d的数量和b是一样的,一代入发现根本成立不了只能a-b-d-c。从而发现是4个人一次循环。在次情况完全满足条件。因此总人数必须是4的倍数,说谎的是总人数的一半。代码如下
#include<iostream>
using namespace std;
int main(){
int n;cin>>n;
while (n--){
int a;cin>>a;
if(a%4!=0)cout<<"-1"<<endl;
else cout<<a/2<<endl;
}
}