PAT-1148(Werewolf )思維+數學問題
阿新 • • 發佈:2020-09-19
Werewolf
PAT-1148
- 題目的要點是不管n規模多大,始終只有兩個狼人
- 說謊的是一個狼人和一個好人
- 緊緊抓住這兩點進行實現和分析
#include <iostream> #include <vector> #include <cmath> using namespace std; int main() { int n; cin >> n; vector<int> v(n+1); for (int i = 1; i <= n; i++) cin >> v[i];//自己說的話 //假設i和j是狼人 for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { vector<int> lie, a(n + 1, 1); a[i] = a[j] = -1;//1表示好人,-1表示和j是狼人(只有兩個狼人) for (int k = 1; k <= n; k++) if (v[k] * a[abs(v[k])] < 0) //k說的是假話 lie.push_back(k); if (lie.size() == 2 && a[lie[0]] + a[lie[1]] == 0) {//說假話的一個是狼人一個是好人 cout << i << " " << j; return 0; } } } cout << "No Solution"; return 0; }