题目链接:点击打开链接
题目大意:对于一串数,不同的位置取或,使其最终答案小于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;
}

本文介绍了一个关于数列的算法问题,通过使用暴力加剪枝的方法来找出数列中不同位置进行按位或操作后结果小于给定阈值的所有可能组合的数量。该方法有效地减少了不必要的计算步骤。
588

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



