欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

中兴笔试题,求子区间元素运算后结果为0

发布时间:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 中兴笔试题,求子区间元素运算后结果为0 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

中兴笔试题,求子区间元素&运算后结果为0

  • 题目描述
  • c++代码实现
  • 输入
  • 输出

题目描述

给定一个长为n(1≤n≤1e51\le n\le 1e51n1e5)的数组,数组的元素为a1,a2,...,an,(1≤ai<220)a_{1},a_{2},...,a_{n} ,(1\le a_{i}<2^{20})a1,a2,...,an,(1ai<220),我们知道长为nnn的数组,有n∗(n+1)/2n*(n+1)/2n(n+1)/2个子区间,现在我想知道这n∗(n+1)/2n*(n+1)/2n(n+1)/2子区间中,有多少个区间的元素&运算后结果为0

c++代码实现

class Solution { public:int Deal(){zero_num = 0 ;scanf("%d",&size);vector<int> list(size);for(int i=0;i<size;++i){scanf("%d",&(list[i]));}FindSon(list,0xffffffff,0,0);return zero_num;}void FindSon(vector<int>&list,int flag,int two,int count){if(count==size){if(two==2){if(flag==0){++zero_num;}}return;}if(two==0){FindSon(list,flag,two,count+1);FindSon(list,flag&list[count],two+1,count+1);}else if(two==1){FindSon(list,flag&list[count],two,count+1);FindSon(list,flag&list[count],two+1,count+1);}else{if (flag == 0){++zero_num;}return;}} private:int zero_num;int size; };

输入

3 2 1 3

输出

2

总结

以上是生活随笔为你收集整理的中兴笔试题,求子区间元素运算后结果为0的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。