耗费了近两个小时吧。
自己一个小时写出来差一个点的,不过估计考场上真的写不出来,中间debug心态大崩,我一开始直接想的是遍历每个说谎者组合,写了100多行,后来看了柳神,,太厉害了。
用-1而不用bool可以使用乘法判断二者异或,并且还能用加法等于0判断是否刚好有一个狼人说谎。真的佩服佩服。
ac代码(看六神自己写的,没柳神的好):
#include<bits/stdc++.h>
using namespace std;
int player[101]={};
int wolf[101];
int main(){
int n;
vector<int>lie;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&player[i]);
}
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
fill(wolf,wolf+101,1);
wolf[i]=-1;
wolf[j]=-1;
lie.clear();
for(int k=1;k<=n;k++){
if(player[k]*wolf[abs(player[k])]<0) lie.push_back(k);
}
if(lie.size()==2){
if(player[i]*wolf[abs(player[i])]>0||player[j]*wolf[abs(player[j])]>0)
if(!(player[i]*wolf[abs(player[i])]>0&&player[j]*wolf[abs(player[j])]>0)){
printf("%d %d",i,j);return 0;
}
}
}
}
printf("No Solution");
return 0;
}