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需要从最后的状 ...
随机推荐
- [反汇编练习] 160个CrackMe之021
[反汇编练习] 160个CrackMe之021. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- POJ 3565 Ants (最小权匹配)
题意 给出一些蚂蚁的点,给出一些树的点,两两对应,使他们的连线不相交,输出一种方案. 思路 一开始没想到怎么用最小权匹配--后来发现是因为最小权匹配的方案一定不相交(三角形两边之和大于第三边)--还是 ...
- 【转】 IOS 项目配置--构建输出DIR
原文网址:http://blog.csdn.net/fengsh998/article/details/8868871 通常在情一般都不建议使用绝对路径,因为写死之后,换环境,换平台,又要重新修改路径 ...
- svn sc create 命令行创建服务自启动
今天重装了系统,Subversion服务也得重装.照例输入代码: sc create svnserve binpath="d:\PortableApps\svn\svnserve.exe - ...
- 在SQL语言中,join什么时候用,什么时候不用啊?请高手举例解释一下。谢谢
JOIN 在内连接时,可以不使用,其它类型连接必须使用.如SELECT * FROM TABLEA INNER JOIN TABLEB ON A.ID=B.ID可以这样写:SELECT * FROM ...
- Yii 显示错误信息(Fatal Error,Warning)在页面上
Yii由于设计上对于一些php奇怪问题的顾虑,并没有像cake,kohana一样把php错误信息打印在页面上. 遇到错误时,只是显示白页,这让没有经验的programmer会一头雾水. 实际上通常vh ...
- TextView------文字底部或者中间加横线
promotionLinkText = (TextView) this .findViewById(R.id. text_promotion_link ); 中间加横线 promotionLinkTe ...
- 【转】linux mknod命令解析
转自:http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html 个人觉得linux的软件设计思想异常强大,比如把所有的设备都当做文件 ...
- 基于opencv的手写数字识别(MFC,HOG,SVM)
参考了秋风细雨的文章:http://blog.csdn.net/candyforever/article/details/8564746 花了点时间编写出了程序,先看看效果吧. 识别效果大概都能正确. ...
- Java 8新特性之集合
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; i ...