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 ...
随机推荐
- notepad++使用技巧
1.将tab设置为插入4个空格而不是tab字符 1)点击设置-->首选项 2)选中转换为空格.点击蓝色数字,可以设置制表符宽度 2.对已有文档,进行tab和空格的相互转换 选中编辑-->空 ...
- yii2 ActiveRecord常用用法
User::find()->all(); 返回所有数据 User::findOne($id); 返回 主键 id=1 的一条数据 User::find()->where ...
- 两个由于php.ini配置错误导致的报错:ajax图片上传报错和exec报错
遇到了两个由于php.ini配置错误导致的报错:ajax图片上传报错和exec报错 首先第一个: 在做一个用ajax图片上传的功能中,php报了这样一个错误:File upload error - u ...
- struts2整合jfreechart
需要的包: struts2-jfreechart-plugin-2.2.1.1.jar jfreechart-1.0.13.jar jcommon-1.0.17.jar 前台jsp页面中可以使用ifr ...
- python三级菜单的实现
一.作业要求 1.使用字典实现三级菜单功能 2.直接输入前面数字进入下一级菜单 3.按B返回上一级,按Q退出 二.需要知识点 1.if循环 2.for循环,enumerate的用法 3.while循环 ...
- Hadoop中的RPC
基于hadoop2.6.4,RPC相关的实现位于hadoop-common这个project中hadoop-common-project/hadoop-common/src/main/java的包pa ...
- Android中的pix,sp,dp相关概念
px( pixel) 像素,可以简单的理解为一个点或方块,用以颜色的显示(单位),一般指印刷品或屏幕设置设备的颜色显示定义. dip(device independent pixels)设备独立像素. ...
- Map集合的四种遍历
Map集合遍历 Map<String,Integer> m = new HashMap<String,Integer>(); m.put("one",100 ...
- DM8168 解码显示模块代码阅读分析
解码/显示概述:从共享文件夹获取H264流,对264流进行解析,生成hdr文件,hdr文件中包含每一帧的信息,将视频帧信息存放在A8核分配的共享内存空间,供其他核或其他的link调用,M3 Video ...
- css实现网页布局随滚轮变化响应移动
_position:absolute; _top:expression(eval(document.documentElement.scrollTop)); 1.第一句代码 _position:abs ...