原题:https://pintia.cn/problem-sets/994805342720868352/problems/1038429808099098624
方法:暴力枚举,枚举两个狼人,i从1到N-1, j从i+1到N
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <map>
#include<stack>
#include<queue>
#include<sstream>
using namespace std;
/*
A1148 Werewolf - Simple Version (20 分)
树
*/
const int MaxN = 110;
int main() {
//freopen("input.txt", "r", stdin);
int N;
cin >> N;
vector<int> say(N + 1); //每个人说的话
for (int i = 1; i <= N; i++) {
cin >> say[i];
}
//枚举两个狼人,i从1到N-1, j从i+1到N
vector<int> pe(N + 1); //1为好人,-1为狼人
for (int i = 1; i < N; i++) {
for (int j = i + 1; j <= N; j++) {
vector<int> liar;
//重置人矩阵
fill(pe.begin(), pe.end(), 1);
pe[i] = pe[j] = -1;
for (int k = 1; k <= N; k++) {
if (pe[labs(say[k])] * say[k] < 0) //说谎
liar.push_back(k);
}
if (liar.size() == 2 && pe[liar[0]] + pe[liar[1]] == 0) {
cout << i << " " << j << endl;
return 0;
}
}
}
cout << "No Solution\n";
return 0;
}