PAT甲級 1148 Werewolf - Simple Version (20分) 狼人殺(簡單版) 暴力枚舉

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章