题目:https://pintia.cn/problem-sets/994805260223102976/problems/1038429385296453632

主要是三个vector:lie、v、a,一个存撒谎的人,用来判断人数,一个用来存原始投票,最后一个用来存撒谎的性质

代码

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<vector>
  4. #include<cmath>
  5. using namespace std;
  6. int main(){
  7. int n;
  8. scanf("%d", &n);
  9. vector<int> v(n + 1);
  10. for(int i = 1; i <= n; i++) scanf("%d", &v[i]);
  11. //分别假设i和j是狼人
  12. for(int i = 1; i <= n; i++){
  13. for(int j = i + 1; j <= n; j++){
  14. vector<int> lie, a(n + 1, 1);
  15. a[i] = a[j] = -1;
  16. for(int k = 1; k <= n; k++){
  17. if(v[k] * a[abs(v[k])] < 0) lie.push_back(k);
  18. }
  19. if(lie.size() == 2 && a[lie[0]] + a[lie[1]] == 0){
  20. cout << i << " " << j;
  21. return 0;
  22. }
  23. }
  24. }
  25. cout<< "No Solution";
  26. return 0;
  27. }