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 DOC阅读笔记
Mysql DOC阅读笔记 转自我的Github Speed of SELECT Statements 合理利用索引 隔离调试查询中花费高的部分,例如函数调用是在结果集中的行执行还是全表中的行执行 最 ...
- Null Pointer --设计模式
在Joshua Bloch很有名的一本书<Effective in java>中建议不要在代码中返回空的collection/map/array,就像下面的代码一样: public Lis ...
- emment语法
emment插件语法.md 元素 div → <div></div>foo → <foo></foo> 嵌套运算符 子: > div>ul& ...
- css3 标题超过长度自动省略号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- php图片上传代码
使用copy函数 if (!empty($_FILES)) { //图片 if(isset($_FILES['image'])) { $img_data = $_FILES['image']['tmp ...
- 回答了个问题,9x9 乘法表生成器
# -*- coding: utf-8 -*- from prettytable import PrettyTable pt = PrettyTable() # 需要安装prettytable这个库来 ...
- Js处理数据——前端分页工具
这几天有小伙伴讨论起了分页的相关问题,这里我也简单讲下前端如何简单便捷的利用Js(库)写出优雅,好用的分页工具. 分页是个很简单又超多接触的技术点,粗略来讲分如下两种: 真分页--每次根据页码.页大小 ...
- 自定义modal一个控制器的效果, presentViewController
presentViewController 一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UI ...
- C技巧:结构体参数转成不定参数
下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏"__VA_ARGS__",下面这段程序可以在GCC下正常编译通过 ...
- IntelliJ IDEA Subversion的使用方式
接着一直点下一步基本上就可以了