Sample Input 1:
5
-2
+3
-4
+5
+4
Sample Output 1:
1 4
Sample Input 2:
6
+6
+3
+1
-5
-2
+4
Sample Output 2 (the solution is not unique):
1 5
Sample Input 3:
5
-2
-3
-4
-5
-1
Sample Output 3:
No Solution
题解
用v[]
存储每个人说的话,
让i
从1~n
,j
从i+1~n
,表示第i
和j
个人是狼人,
用a[]
表示是否是狼人,
再让k
从1~n
,如果k
个人说的与事实不符,则认为其说谎,将其加入到lie[]
中,
若刚好有两人说谎,并且一人是好人,一人是狼人,则输出i,j
#include <iostream>
#include <vector>
#include <unordered_map>
#include <set>
#include <cmath>
using namespace std;
vector<int> index;
set<int> good,bad;
int n;
vector<int> v,temp_v;
int main(){
cin >> n;
v.resize(n+1);
for(int i=1;i<=n;i++){
cin >> v[i];
}
for(int i=1;i<=n;i++){
for(int j = i+1;j<=n;j++){
vector<int> lie,a(n+1,1);
a[j] = a[i] = -1;
for(int k=1;k<=n;k++){
if(v[k] * a[abs(v[k])] < 0) lie.push_back(k);
}
if(lie.size() == 2 && a[lie[0]] + a[lie[1]] == 0){
cout << i << " " << j;
return 0;
}
}
}
cout << "No Solution";
system("pause");
return 0;
}