当前位置:   article > 正文

蓝桥杯真题:异或数列_蓝桥杯 异或数列

蓝桥杯 异或数列

 

输入输出样例

示例 1

输入

  1. 4
  2. 1 1
  3. 1 0
  4. 2 2 1
  5. 7 992438 1006399 781139 985280 4729 872779 563580

输出

  1. 1
  2. 0
  3. 1
  4. 1

评测用例规模与约定

对于所有评测用例,1≤T≤200000,1≤i=1∑T​ni​≤200000,0≤Xi​<2020​。​

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

这题是很巧妙的一道位运算题目,参考:

蓝桥杯2021年第十二届省赛-异或数列_zy98zy998的博客-CSDN博客_蓝桥杯异或数列

如果是平局,A^B=0其实等价于所有输入的数异或等于0

再来看先手后手:

 代码如下所示:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int num[23];
  4. long long a;
  5. void pre(long long a)
  6. {
  7. int cnt=1;
  8. while(a)
  9. {
  10. if(a&1) num[cnt]++;
  11. a>>=1;
  12. cnt++;
  13. }
  14. }
  15. int main()
  16. {
  17. // 请在此输入您的代码
  18. int T;
  19. ios::sync_with_stdio(0);cin.tie(0);
  20. cin>>T;
  21. while(T--)
  22. {
  23. memset(num,0,sizeof(num));
  24. int n,sum=0;
  25. cin>>n;
  26. for(int i=0;i<n;++i)
  27. {
  28. cin>>a;
  29. pre(a);
  30. sum^=a;
  31. }
  32. if(!sum) printf("0\n");
  33. else
  34. {
  35. for(int i=20;i>0;--i)
  36. {
  37. if(num[i]==1)
  38. {
  39. printf("1\n");
  40. break;
  41. }
  42. else if(num[i]%2==1)
  43. {
  44. if(n%2==1)
  45. {
  46. printf("1\n");
  47. break;
  48. }
  49. else if(n%2==0)
  50. {
  51. printf("-1\n");
  52. break;
  53. }
  54. }
  55. }
  56. }
  57. }
  58. return 0;
  59. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/560716
推荐阅读
相关标签
  

闽ICP备14008679号