1148 Werewolf - Simple Version
假设玩家i,j是狼人,两个for循环遍历所有玩家说谎的情况,若只有两个玩家说谎,且一个是狼人一个是好人,则假设i,j是狼人成立。
说谎判断:
1,玩家说是狼人的玩家不是狼人。
2,玩家说不是狼人的玩家是狼人。
1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 int main() { 6 int n,statement[200],i,j,FLAG = 1; 7 cin>>n; 8 for(i = 1; i <= n; ++i) 9 cin>>statement[i]; 10 for(i = 1; i <= n &&FLAG; ++i) { //假设i,j是狼人 11 for(j = i+1; j <= n &&FLAG; ++j) { 12 vector<int> flag(n+1,1),liar; 13 flag[i] = flag[j] = -1;//狼人标记为 -1 14 for(int k = 1; k <= n; ++k)//遍历所有玩家,找出说谎的玩家 15 if(statement[k]*flag[abs(statement[k])] < 0) liar.push_back(k); 16 if(liar.size() == 2 && flag[liar[0]] + flag[liar[1]] == 0) { //有且仅有两个玩家说谎,且一个是狼人,一个是好人 17 cout<<i<<" "<<j<<endl; 18 FLAG = 0; 19 } 20 } 21 } 22 if(FLAG) cout<<"No Solution"<<endl; 23 return 0; 24 }