HDU 4737 A Bit Fun 2013成都 网络赛 1010
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4737
题目大意:给定一系列数,F(i,j)表示对从ai到aj连续求或运算,(i<=j)求F(i,j)<=m的总数。
解题思路:或运算只会让值变大或保持不变。不断通过右移j来更新F(i,j),当aj>=m时所有的i<=j F(i,j)都大于等于m,因此从j后面继续扫数组;当aj<m而F(i,j)>=m时通过右移i来使F(i,j)<m。扫完整个数组即可。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int tmp[],last;
long long A[];
long long m,now;
int n;
void getin(long long x)
{
int i=;
while(x)
{
if(x&)
tmp[i]++;
x/=;
i++;
}
if(last<i-)
last=i-;
return;
}
void Minus(int i)
{
int k=;
long long x=A[i];
while(x){
if(x%)
tmp[k]-=;
x/=;
k++;
}
return;
}
long long getnow()
{
int i;
long long x=;
long long s=;
for(i=;i<=;i++)
{
if(tmp[i]>)
s+=x;
x*=;
}
return s;
}
int geti(int i,long long Now)
{
while(Now>=m){
Minus(i);
i++;
Now=getnow();
}
now=Now;
return i;
}
void pls(int j)
{
int k;
long long x=A[j];
for(k=;k<=;k++)
{
if(x%)
tmp[k]+=;
x/=;
}
return;
}
int main()
{
int Case=;
int t,i,j,sum;
scanf("%d",&t);
while(t--)
{
sum=;
scanf("%d%I64d",&n,&m);
for(i=;i<n;i++)scanf("%I64d",&A[i]);
i=j=;
while(j<n)
{
while(j<n&&A[j]>=m)
j++;
if(j>=n)
break;
i=j;
sum++;
memset(tmp,,sizeof(tmp));
last=;
now=A[i];
getin(A[i]);
if(j+>=n)
{
j++;
}
while(j<n){
if(A[++j]>=m||j>=n){
break;
}
else
{
if((A[j]|now)>=m)
{
pls(j);
i=geti(i,now|A[j]);
sum+=j-i+;
}
else
{
sum+=j-i+;
pls(j);
now=A[j]|now;
}
}
}
}
printf("Case #%d: ",Case++);
printf("%d\n",sum);
}
return ;
}
想思路的时候想复杂了,需要右移i时,其实可以直接从j开始向前找到最小的i使F(i,j)<m。不需要像我一样开数组记录
HDU 4737 A Bit Fun 2013成都 网络赛 1010的更多相关文章
- HDU 4734 F(x) (2013成都网络赛,数位DP)
F(x) Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 4731 Minimum palindrome (2013成都网络赛,找规律构造)
Minimum palindrome Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 4737 A Bit Fun (2013成都网络赛)
A Bit Fun Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 4733 G(x) (2013成都网络赛,递推)
G(x) Time Limit: 2000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 4730 We Love MOE Girls (2013成都网络赛,签到水题)
We Love MOE Girls Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4768 Flyer (2013长春网络赛1010题,二分)
Flyer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 4747 Mex (2013杭州网络赛1010题,线段树)
Mex Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- HDU 4763 Theme Section (2013长春网络赛1005,KMP)
Theme Section Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 4759 Poker Shuffle(2013长春网络赛1001题)
Poker Shuffle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
随机推荐
- mysql 5.7安装脚本
[root@HE2 ~]# cat mysql_auto_install.sh ###### 二进制自动安装数据库脚本root密码MANAGER将脚本和安装包放在/root目录即可########## ...
- wap开发之滑动事件(swipe、tap、swipeleft、swiperight)等
最近一直找在wap端可以实现的swipe等滑动事件的方法,开始研究了jquery-mobile,zepto,结果由于jqm太大.zepto有不少缺陷.为此研究了zepto,想把里面的swipe事件独立 ...
- js data日期初始化的5种方法new Date()
var objDate=new Date([arguments list]); 参数形式有以下5种: 1)new Date("month dd,yyyy hh:mm:ss"); 2 ...
- dedecms插件开发教程
这是一个很简单插件实例,通过此插件,你可以知道怎么样开发一个插件,它结构是怎么设置的,数据库,后台等.文件结构:enroll.php 文件在 plus文件下enroll.htm文件在templets/ ...
- ng表单验证,提交以后才显示错误
只在提交表单后显示错误信息 有时候不想在用户正在输入的时候显示错误信息. 当前错误信息会在用户输入表单时立即显示. 由于Angular很棒的数据绑定特性,这是可以发生的. 因为所有的事务都可以在一瞬间 ...
- 在redis中查询一个KEY的值
写入某个key: set MPM_YYC_XTJ_0 "abcde" [set key value]
- Eclipse中的add jars和add external jars有什么区别(转载)
转载自:http://blog.csdn.net/yasi_xi/article/details/12772457 add jars和add external jars有什么区别? add ext ...
- slivelight5和数据库交互
最近开始研究sliverlight和数据库交互了,无奈网上资料较少,查阅了大量资料终于成功了,但是我记得还有别的方法,希望大家讨论一下 数据访问层我的用的是ado.net实体数据模型 然后新建了一个w ...
- qt 5 基础知识 2(控件篇)
QVBoxLayout *lay = new QVBoxLayout(this); // 创建一个竖直的盒子 lebel 篇 lay->addWidget(label = new QLabel( ...
- leetcode第三题Longest Substring Without Repeating Characters java
Longest Substring Without Repeating Characters Given a string, find the length of the longest substr ...