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 }

 

posted @ 2020-03-13 13:25  tangq123  阅读(137)  评论(0编辑  收藏  举报