直接暴力枚举。
bool check(int a,int b)
{
set<int> wolfs;
wolfs.insert(a),wolfs.insert(b);
int liar_human=0,liar_wolf=0;
for(int i=1;i<=n;i++)
{
int t=state[i];
if((t < 0 && wolfs.count(abs(t)) == 0) || (t > 0 && wolfs.count(t)))
{
if(i == a || i == b) liar_wolf++;
else liar_human++;
}
}
return liar_wolf == 1 && liar_human == 1;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>state[i];
bool ok=false;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(check(i,j))
{
cout<<i<<' '<<j<<endl;
ok=true;
break;
}
}
if(ok) break;
}
if(!ok) puts("No Solution");
//system("pause");
return 0;
}