题目描述
给定一个长为n( 1 ≤ n ≤ 1 e 5 1\le n\le 1e5 1≤n≤1e5)的数组,数组的元素为 a 1 , a 2 , . . . , a n , ( 1 ≤ a i < 2 20 ) a_{1},a_{2},...,a_{n} ,(1\le a_{i}<2^{20}) a1,a2,...,an,(1≤ai<220),我们知道长为 n n n的数组,有 n ∗ ( n + 1 ) / 2 n*(n+1)/2 n∗(n+1)/2个子区间,现在我想知道这 n ∗ ( n + 1 ) / 2 n*(n+1)/2 n∗(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