题目:1089 狼人杀-简单版 - PAT (Basic Level) Practice (中文) (pintia.cn)
重点在于有两个狼人,两个人说谎,不是所有的狼人说谎,所以我们可以得出一个结论:
一个狼人说谎一个好人说谎
我们枚举两个狼人,首先把要枚举的位置设为-1代表狼人,说过输入的值和对应的位置的值相乘是-1,说明说谎了。
#include<bits/stdc++.h>
using namespace std;
int a[105];
int main()
{
int n=0;cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
vector<int> v(n+1,1); //注意n+1,下标从1开始
v[i]=-1,v[j]=-1;
vector<int>lie;
for(int k=1;k<=n;k++)
{
if(a[k]*v[abs(a[k])]<0)
{
lie.push_back(v[k]);
}
}
if(lie.size()==2&&lie[0]+lie[1]==0)
{
cout<<i<<" "<<j<<endl;
return 0; //一定要return 0;提前把值返回了,不会最后还是会执行"No solution"
}
}
}
cout<<"No Solution";
return 0;
}