#include<bits/stdc++.h>
using namespace std ;
const int maxn = 1e2 + 10 ;
const int inf = 0x3f3f3f3f ;
int n ;
void deal(){
cin >> n ;
vector<int > s(n+1) ;
for(int i = 1 ; i <= n ; i++){
//这里把 abs(s[i])看成一个编号,取绝对值后这样就不看符号
cin >> s[i] ;//s[i] < 0,则abs(s[i])为坏 , s[i] > 0,则abs(s[i])为好
}
for(int i = 1 ; i <= n ; i++){//假设i和j是狼人
for(int j = 1 ; j <= n ; j++){
if(i == j)continue ;
vector<int > v(n+1 , 1) , lie ;//v[i]表示i是好人还是狼人,-1是狼人
v[i] = -1 , v[j] = -1 ;
for(int k = 1 ; k <= n ; k++){
//s[k] > 0 , v[s[k]] > 0 代表s[k]是好人,且k没说谎
// s[k] > 0 , v[s[k]] < 0 代表s[k]是坏人,而k说谎了
//s[k] < 0 , v[abs(s[k])] > 0 代表abs(s[k])是好人,而k说谎了
// s[k] < 0 , v[s[k]] < 0 代表abs(s[k])是坏人,且k没说谎
if(s[k] * v[abs(s[k])] < 0)lie.push_back(k) ;
}
//说谎人数为2,且说谎的人是一个好人和一个坏人
if (lie.size() == 2 && v[lie[0]] + v[lie[1]] == 0) {
cout << i << " " << j << endl ;
return ;
}
}
}
cout << "No Solution\n" ;
}
int main(){
deal() ;
return 0 ;
}
pat甲级1148
于 2023-03-11 11:36:17 首次发布