您的位置:首页 > 其它

HDU 4737 A Bit Fun

2013-09-14 17:58 405 查看
 This problem is simple too.

 The thinking is just  enumeration。

  But if you can not deal with the details,it is easy to be the TLE。

  Problem:


A Bit Fun

Problem Description

There are n numbers in a array, as a0,
a1 ... , an-1, and another
number m. We define a function f(i, j) = ai|ai+1|ai+2|
... | aj . Where "|" is the bit-OR operation. (i <= j)
The problem is really simple: please count the number of different pairs of (i, j) where f(i, j) < m.


Input

The
first line has a number T (T <= 50) , indicating the number of test cases.
For each test case, first line contains two numbers n and m.(1 <= n <= 100000, 1 <= m <= 230)
Then n numbers come in the second line which is the array a, where 1 <= ai <= 230.


[b]Output
[/b]

For
every case, you should output "Case #t: " at fi
937e
rst, without quotes. The t is the case number starting from 1.




[b]My code :[/b]



#include <stdio.h>
#include <stdlib.h>
const int size = 1000010;
int a[size];
int main()
{
int t,n,m,s,e,count,f;
scanf("%d",&t);
for(int i = 0;i < t;i++)
{
count = 0;
scanf("%d%d",&n,&m);
for(int j=0;j<n;j++)
scanf("%d",&a[j]);
for(s=0;s<n;++s)
{
if(a[s]>m)continue;
else
{
f=a[s];
for(e=s;e<n;++e)
{
f=f|a[e];
if(f<m)count++;
else break;
}
}
}
printf("Case #%d: %d\n",i+1,count);
}
}


ps: Forgive my poor English.......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm simple