2013 ACM/ICPC Asia Regional Chengdu Online problem1003
题目大意:求小于给定数的按位或子段个数。
题目分析:暴搜+比较低级的剪枝。(按位或只会越或越大,所以如果结果已经大于限定数,就可以跳出了)
code:
#include<stdio.h>
int main()
{
int i,j,t,tc,m,n,a[100010],cnt,sum;
scanf("%d",&t);
for(tc=1;tc<=t;tc++)
{
cnt=0;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
if(a[i]>=m)continue;
sum=a[i];
for(j=i;j<n;j++)
{
sum|=a[j];
if(sum>=m)break;
else cnt++;
}
}
printf("Case #%d: %d\n",tc,cnt);
}
}
PS:又一小水