maxmin
1148 Werewolf - Simple Version (20 分)
题意
有n个生物,其中有两只狼,其他的都是人,每个生物都说一句话。用整数表示。负数表示狼,正数表示人。-1表示他认为第一个是狼。+1表示他认为第一个是人。
所有生物中有一只狼和一个人说谎,请找出两只狼。多种结果输出编号最小的。没有结果输出No Solution
思路
令i j为狼,从1,2到n-1, n列举两只狼的情况。i,j为狼,其他的都是人。
再对所有生物的话判断出说谎的人,如果说谎的人正好有两个且为一人一狼,这种情况符合条件。
代码
#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
vector<int>p;
int x[10007],n,vis[10007];
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x[i]);
}
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
fill(vis,vis+n+1,1);
vis[i]=vis[j]=-1;
p.clear();
for(int k=1;k<=n;k++){
if(x[k]<0&&vis[-x[k]]>0||x[k]>0&&vis[x[k]]<0){
p.push_back(k);
}
}
if(p.size()==2&&vis[p[0]]+vis[p[1]]==0){
printf("%d %d\n",i,j);
return 0;
}
}
}
printf("No Solution\n");
return 0;
}