题目大意就是有且仅有一只狼在说谎 就是说一定会有狼人说谎并且只有一只
如果有多种情况 我们输出字典序最小的那种情况
采用枚举法来列举狼人
写一个函数判断在狼人是i和j的时候k是否说谎
贴一下ac代码:
#include<iostream>
using namespace std;
const int N=110;
int q[N];
int judge(int k,int i,int j)//已知狼人是i和j 判断k是否说谎 说谎返回1,未说谎返回0
{
int t=q[k];
if(t>0)
{
if(t==i||t==j) return 1;
return 0;
}
t=-t;
if(t==i||t==j) return 0;
return 1;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;++i) cin>>q[i];
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j)
{
int s;
s=judge(i,i,j)+judge(j,i,j);
if(s!=1) continue;//不是只有一个狼人说谎
s=0;
for(int k=1;k<=n;++k) s+=judge(k,i,j);
if(s!=2) continue;//说谎总数不是2
cout<<i<<" "<<j;
return 0;
}
puts("No Solution");
return 0;
}