乙级时候就做过了,没想到又忘了,没做出来
先假设有两个狼人,判断是否有两个人说谎,且一狼一人
狼说谎的两种情况
1. 狼说自己是平民
2. 说平民是狼
人说谎同理
#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
int main(){
int n;
cin>>n;
int a[maxn]={0};
int flag=0;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int cun,lang;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
cun=lang=0;
for(int k=1;k<=n;k++){
if(k==i||k==j){
if(a[k]>0&&(a[k]==i||a[k]==j))
lang++;
else if(a[k]<0&&(a[k]!=-i&&a[k]!=-j))
lang++;
}
else{
if(a[k]>0&&(a[k]==i||a[k]==j))
cun++;
else if(a[k]<0&&a[k]!=-i&&a[k]!=-j)
cun++;
}
}
if(cun==1&&lang==1){
cout<<i<<" "<<j<<endl;
return 0;
}
}
}
cout<<"No Solution"<<endl;
return 0;
}