1089 狼人杀-简单版 解题代码测试结果问题整理 解题代码 #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int n, temp; 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, a(n + 1, 1); a[i] = a[j] = -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) { printf("%d %d", i, j); return 0; } } } printf("No Solution"); return 0; } 测试结果 问题整理 1.代码思路完全来自于柳神,我之前也是想列举狼头,但是想进一步假设撒谎的一匹狼和一个民来验证所有人的身份的正确性。 2.柳神在判断每个人是否撒谎上做的非常精彩,用a来表明身份,通过发言和身份同号则真的特性,将筛选出来的讲假话的人存进lie,最后通过两个讲假话的人的身份和为零并且只有两个撒谎者来结束本题,精彩精彩。