PTA甲級考試真題練習148——1148 Werewolf - Simple Version

題目

在這裏插入圖片描述

思路

二重循環假設兩個狼人,判斷說謊人數,如果恰好爲2並且一個是狼人一個是平民,則輸出,若找不到則輸出No Solution

代碼

#include <iostream>
#include <vector>
#include <set>
using namespace std;
vector<int> vec;
int main()
{
	int n;
	cin >> n;
	vec.resize(n + 1);
	vector<int> mark;
	mark.resize(n + 1);
	fill(mark.begin(), mark.end(), 1);
	for (int i = 1; i <= n; ++i) cin >> vec[i];
	for (int i = 1; i <= n-1; ++i) {
		for (int j = i + 1; j <= n; ++j) {
			mark[i] = -mark[i];
			mark[j] = -mark[j];
			set<int> v;
			for(int k = 1; k <= n; ++k) {
				if (vec[k] * mark[abs(vec[k])] < 0)
					v.emplace(k);
			}
			if (v.size() == 2 && ((v.find(i) == v.end() && v.find(j) != v.end()) || (v.find(j) == v.end() && v.find(i) != v.end()))) {
				cout << i << " " << j;
				return 0;
			}
			mark[i] = -mark[i];
			mark[j] = -mark[j];
		}
	}
	cout << "No Solution";
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章