PAT甲級 1148 Werewolf - Simple Version (20分) 狼人殺(簡單版) 暴力枚舉
題解:
總共有兩個狼人。
題目說的很明顯,說謊的肯定一個是狼人,一個是村民。
所以我們只要暴力枚舉那兩個狼人即可,然後計算說謊的人數,當這個人數等於2且一個是狼人一個是村民時,就可以輸出答案了。
若沒有答案,則輸出“No Solution”
代碼如下:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<string>
#include<string.h>
#include<map>
#include<vector>
#define MAX 105
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n;
int a[MAX],flag[MAX];//flag[i]==1說明是村民,flag[i]==-1說明是狼人
bool tag=false;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
vector<int> res;//存儲說謊的兩個人
for(int k=1;k<=n;k++) flag[k]=1;
flag[i]=flag[j]=-1;//標記兩個狼人
for(int k=1;k<=n;k++){
if(flag[abs(a[k])]*a[k]<0){//說明第k個人在說謊
res.push_back(k);
}
}
if(res.size()==2&&flag[res[0]]+flag[res[1]]==0){//恰好有兩個人說謊且一個是狼人,一個是村民
printf("%d %d",i,j);
tag=true;
break;
}
}
if(tag) break;
}
if(!tag) printf("No Solution");
return 0;
}