hdoj 5358 First One
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5358
一开始一直以为是一道数学题,在找有什么规律化简Log2(S(i,j)),结束了以后才造 ⌊log2(x)⌋ 即表示x的二进制的最高位。
总结了以下几点:
1、直接暴力肯定会T,status上基本上都是T
2、⌊log2(S(i,j))⌋ +1,表示S(i,j)用二进制表示的位数
3、S(i,j)可以由S(j) - S(i) 表示
4、用尺取法进行枚举区间在区间[2^(k-1),2^k]内的[ i, [ l, r ]],方法如下
1)固定 i
2)找到大于等于L的第一个 l,和大于等于R的第一个 r+1(即 r 小于 R )
3)排除不符合条件的 l 和 r
3)计算 ( i + j ) 的值
4)改变 i 值重复以上过程
#include<stdio.h>
#include<math.h>
;
int T;
int n;
long long a[MAXN], sum[MAXN];
long long solve(long long L, long long R){
;
int l, r;
l = ; r = ;
//定义两个标记,l和r
; i <= n; ++i){
if( l < i )
l = i;
< i)
r = i - ;
] < L)
l++;
<= n && sum[r+] - sum[i-] < R )
r++;
//循环,使得 sum(i,l) >= L sum(i,r) < R,即上界和下界
if( l > r)
continue;
] < L || sum[r] - sum[i-] >= R )
continue;
] < L || sum[l] - sum[i-] >= R )
continue;
//排除不符合条件的情况
ans += ( )*i+()*(r+l)/;
//求(i,l)到(i,r) 的 i+j 和
}
return ans;
}
int main(){
long long ans;
scanf("%d", &T);
while(T--){
ans = ;
scanf("%d", &n);
sum[] = ;
; i <= n; ++i){
scanf("%I64d",&a[i]);
sum[i] = sum[i-] + a[i];
}
//数据读取,sum存储从第一个元素到第i个元素的和
; k <= ; ++k){
ans += (,k-),pow(,k));
}
ans += solve(,);
//加上[0,1)区间
printf("%I64d\n",ans);
}
}
代码学习了:http://blog.csdn.net/zjck1995/article/details/47321881
ACM毕竟是编程竞赛,数学问题也要结合计算机相关知识进行考虑。
hdoj 5358 First One的更多相关文章
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDOJ 2317. Nasty Hacks 模拟水题
Nasty Hacks Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- HDOJ 1326. Box of Bricks 纯水题
Box of Bricks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDOJ 1004 Let the Balloon Rise
Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...
- hdoj 1385Minimum Transport Cost
卧槽....最近刷的cf上有最短路,本来想拿这题复习一下.... 题意就是在输出最短路的情况下,经过每个节点会增加税收,另外要字典序输出,注意a到b和b到a的权值不同 然后就是处理字典序的问题,当松弛 ...
- HDOJ(2056)&HDOJ(1086)
Rectangles HDOJ(2056) http://acm.hdu.edu.cn/showproblem.php?pid=2056 题目描述:给2条线段,分别构成2个矩形,求2个矩形相交面 ...
- 继续node爬虫 — 百行代码自制自动AC机器人日解千题攻占HDOJ
前言 不说话,先猛戳 Ranklist 看我排名. 这是用 node 自动刷题大概半天的 "战绩",本文就来为大家简单讲解下如何用 node 做一个 "自动AC机&quo ...
- 最近点对问题 POJ 3714 Raid && HDOJ 1007 Quoit Design
题意:有n个点,问其中某一对点的距离最小是多少 分析:分治法解决问题:先按照x坐标排序,求解(left, mid)和(mid+1, right)范围的最小值,然后类似区间合并,分离mid左右的点也求最 ...
- BFS(八数码) POJ 1077 || HDOJ 1043 Eight
题目传送门1 2 题意:从无序到有序移动的方案,即最后成1 2 3 4 5 6 7 8 0 分析:八数码经典问题.POJ是一次,HDOJ是多次.因为康托展开还不会,也写不了什么,HDOJ需要从最后的状 ...
随机推荐
- Java 图片转换为字符图 CharMaps (整理)
/* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...
- (二)win7下用Intelij IDEA 远程调试spark standalone 集群
关于这个spark的环境搭建了好久,踩了一堆坑,今天 环境: WIN7笔记本 spark 集群(4个虚拟机搭建的) Intelij IDEA15 scala-2.10.4 java-1.7.0 版本 ...
- (五)用正则化(Regularization)来解决过拟合
1 过拟合 过拟合就是训练模型的过程中,模型过度拟合训练数据,而不能很好的泛化到测试数据集上.出现over-fitting的原因是多方面的: 1) 训练数据过少,数据量与数据噪声是成反比的,少量数据导 ...
- yii2.0 事务
$transaction=\Yii::$app->db->beginTransaction(); $model=Customer::findOne(1); $model->name= ...
- 搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群
一.环境搭建 Linux下Vagrant搭建Tomcat7.Java7 二.Nginx的安装配置与测试 *虚拟机下转至root sudo -i 1)下载并解压(目前官网最新版本) 创建安装目录:mkd ...
- 构建高性能web站点--读书大纲
用户输入你的站点网址,等了半天..还没打开,裤衩一下就给关了.好了,流失了一个用户.为什么会有这样的问题呢.怎么解决自己站点“慢”,体验差的问题呢. 在这段等待的时间里,到底发生了什么?事实上这并不简 ...
- html asp php java 清除缓存
HTML页面 <META HTTP-EQUIV="pragma" CONTENT="no-cache"><META HTTP-EQUIV=&q ...
- Android服务之Service
android中服务是运行在后台的东西,级别与activity差不多.既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西.你可以启动一个服务Service来播放音乐,或者记录你 ...
- Redis 对String数据类型的操作
Redis的 Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效率更 ...
- 动态定义数组 .xml
pre{ line-height:1; color:#3c3c3c; background-color:#d2c39b; font-size:16px;}.sysFunc{color:#627cf6; ...