AcWing 1641. 狼人杀-简单版
原题链接
简单
作者:
sherlook
,
2020-08-23 20:39:19
,
所有人可见
,
阅读 631
#include <iostream>
#include <map>
using namespace std;
const int N = 110;
map<int, int> sol;
int op[N];
int n;
int main(){
cin >>n;
int cnt = 0,cntij = 0;
for(int i=1; i<=n; i++)
cin >>op[i];
for(int i=1; i<=n; i++){
for(int j=i+1; j<=n; j++){
//假设i j为狼
cnt = 0; //cnt为非狼说谎数
cntij = 0; //cntij为狼的说慌数
//判断条件 失败continue
for(int k=1; k<=n; k++){
if(op[k] >0){
//判断是人
if(op[k] != i && op[k] != j){//真话
}else{
if(k == i || k == j)
cntij ++;
else
cnt ++;
}
}else{
//判断是狼
int l = ~op[k] + 1;
if(l == i || l == j){//真话
}else{
if(k == i || k == j)
cntij ++;
else
cnt ++;
}
}
}
//成功map.insert
if(cnt == 1 && cntij == 1)
sol.insert({i,j});
}
}
if(sol.size() == 0){
cout <<"No Solution";
return 0;
}
auto i = sol.begin();
cout <<i->first<<" "<<i->second<<endl;
}