解题思路参考柳婼
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> v(n+1);
for(int i=1;i<=n;i++)
cin>>v[i]; //i号玩家说的话
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){ //枚举所有可能的狼人组合
vector<int> res(n+1,1),lie;
res[i]=res[j]=-1; //1代表好人,-1代表狼人,假设i号和j号玩家是狼人
for(int k=1;k<=n;k++)
if(v[k]*res[abs(v[k])]<0) lie.push_back(k); //如果k号玩家说的话与假设不同,则k号玩家撒谎
if(lie.size()==2&&res[lie[0]]+res[lie[1]]==0){ //如果有2人说假话且一位是狼人一位是好人
cout<<i<<" "<<j<<endl;
return 0;
}
}
}
cout<<"No Solution"<<endl;
return 0;
}