题目链接
题意:
给你一个数组,求这个数组的所有字段“|”的不同的值有多少个。
思路:
set去重,数据1e5,暴力跑n方肯定会t,所以我们过程中开一个set(应该算是dp)来记录之前“|”过的区间的值。
代码:
#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=2e5+7;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define int long long
signed main()
{
IOS;
int t;
cin>>t;
while(t--)
{
int n;
set<int>num,sum,flag;
cin>>n;
for(int i=0;i<n;i++)
{
int a;
set<int>flag;
flag.clear();
cin>>a;
for(auto i:sum)
{
num.insert(a|i);
flag.insert(a|i);
}
flag.insert(a);
num.insert(a);
sum=flag;
}
cout<<num.size()<<endl;
num.clear();
}
return 0;
}

218

被折叠的 条评论
为什么被折叠?



