题解
逻辑题 |
---|
我一开始的想法是狼人中一定有一个人是说谎的,而且还有另一个不是狼人的人在说谎,于是把说谎的人的可能性,遍历出来。可是这样很麻烦,最后也才是8分,我看到别的代码短的,就没有再去改bug了 |
正确的思路: |
依次遍历每一对人,这一对人是狼人,然后判断有几个说谎的人,如果说谎的人数是2,并且一个是狼人一个不是狼人,就输出 |
判断是否说谎也比较容易 |
加入我们已知谁是狼人谁不是 |
然后和原数据结果不一样的,就是说谎的人 |
Code
#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];
for (int i = 1; i <= N; i++)
{
for (int j = i + 1; j <= N; j++)
{
vector<int> lie, t(N + 1, 1);
t[i] = t[j] = -1;
for (int p = 1; p <= N; p++)
{
int index = abs(v[p]);
if (t[index] * v[p] < 0)
lie.push_back(p);
}
if (lie.size() == 2 && t[lie[0]] + t[lie[1]] == 0)
{
cout << i << " " << j;
return 0;
}
}
}
cout << "No Solution";
return 0;
}