题目链接:点击打开链接
题目大意:对于一串数,不同的位置取或,使其最终答案小于m
题目分析:暴力+剪枝就过了= =。
#include<functional>
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdio>
#include<string>
#define maxn 100005
using namespace std;
__int64 a[maxn];
int n;
__int64 m,ans;
void solve()
{
__int64 tmp;
int i,j,flag=1,count=0;
for( i=0;i<n;i++)
{
tmp=a[i];count=0;
if(a[i]>=m) continue;
for( j=i;j<n;j++)
{
tmp=tmp|a[j];
if(tmp>=m)
break;
else {count++;}
}
ans+=count;;
}
}
int main()
{
int t,tt=1;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%d %I64d",&n,&m);
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
solve();
printf("Case #%d: %I64d\n",tt++,ans);
}
return 0;
}