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需要从最后的状 ...
随机推荐
- 整理一些js中常见的问题
原文链接 1.js获取select标签选中的值 原生js var obj = document.getElementByIdx_x(”testSelect”); //定位id var index = ...
- 同步内核缓冲区sync、fsync和fdatasync函数
转自http://www.2cto.com/os/201409/339460.html 同步内核缓冲区 1.缓冲区简介 人生三大错觉之一:在调用函数write()时,我们认为该函数一旦返回,数据便已经 ...
- selinux --chcon命令
chcon命令:修改对象(文件)的安全上下文.比如:用户:角色:类型:安全级别. 命令格式: Chcon [OPTIONS…] CONTEXT FILES….. Chcon [OPTIONS…] –r ...
- tcp的精髓:滑动窗口
TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现.一.滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部分更多, ...
- hadoop完全分布式模式的安装和配置
本文是将三台电脑用路由器搭建本地局域网,系统为centos6.5,已经实验验证,搭建成功. 一.设置静态IP&修改主机名&关闭防火墙(all-root)(对三台电脑都需要进行操作) 0 ...
- 【转】Github轻松上手5-站在巨人的肩膀上(Fork)
转自:http://blog.sina.com.cn/s/blog_4b55f6860100zzj3.html 有时候你可能想给别人的项目出把力,或者想以别人的项目作为自己项目的起点,在Github里 ...
- 【转】IOS 开发环境,证书和授权文件等详解
(转自:http://blog.csdn.net/gtncwy/article/details/8617788) 一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证, ...
- Javascript的匿名函数
一.什么是匿名函数?在Javascript定义一个函数一般有如下三种方式:函数关键字(function)语句:function fnMethodName(x){alert(x);}函数字面量(Func ...
- android LinearLayout 实现两端对齐
<?xml version="1.0″ encoding="utf-8″?> <LinearLayout xmlns:android="http://s ...
- CMake实践(4)
一,本期目标: [sun@localhost t4]$ cat README 任务:如何使用外部共享库和文件 二,目录结构 [sun@localhost t4]$ tree ../t4../t4├── ...