题意:有两个说谎者。至少有一批狼说谎,但是不超过所有狼,因此,我们遍历狼的个数,让遍历狼身份为-1,正常人为1,再对照他们说的话,判断是否有两个说谎者,且不全为狼;
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
int adj[108];
int main(){
int N;
cin >> N;
for(int i = 1; i <= N ;i++) cin >> adj[i];
for(int i = 1; i <= N-1; i++){
for(int j = i + 1; j <= N; j++){
vector<int>sign(N+1,1);
vector<int>liars;
sign[i] = -1;
sign[j] = -1;
for(int k = 1; k <= N; k++){
if(adj[k] * sign[abs(adj[k])] < 0) liars.push_back(k);
}
if(liars.size() > 2) continue;
if((i == liars[0] && j != liars[1]) || (i == liars[1] && j != liars[0]) ||(i != liars[0] && j == liars[1]) ||(i !=liars[1] && j == liars[0]) ){
cout << i <<" " <<j <<endl;
return 0;
}
else
continue;
}
}
cout <<"No Solution"<<endl;
}