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需要从最后的状 ...
随机推荐
- adapter适配器模式
适配器设计模式概述 将一个类的接口转换成另外一个客户希望的接口.从而使原来不能直接调用的接口变得可以调用 优点: 让本来不适合使用的接口变得适合使用 缺点: 一次只能适配一个类,具有 ...
- Android程序架构基本内容概述
在Android操作系统中开发的应用程序都有一个结构缜密的架构.我们今天就来对这一Android程序架构做一个详细的分析.帮助大家了解程序开发的特点,以方便将来在应用程序开中明确自己的程序架构. An ...
- Spark源码阅读(1): Stage划分
Spark中job由action动作生成,那么stage是如何划分的呢?一般的解答是根据宽窄依赖划分.那么我们深入源码看看吧 一个action 例如count,会在多次runJob中传递,最终会到一个 ...
- PHP实现站点pv,uv统计(二)
数据采集脚本如下: error_reporting(0);date_default_timezone_set("PRC");$environment = get_cfg_var(' ...
- 【英语】Bingo口语笔记(40) - [aʊ]的发音规则
[aʊ]的发音规则 先发音标的音再去拼出单词的读音down
- Linux VPS 基本命令
我们Linux VPS用命令才能管理他,我们来罗列一些基本和简单的Linux的命令 1.lsls / 查看根目录ls -a / 查看根目录下所要文件,包括隐藏文件ls -l / 详细列出目录下文件的权 ...
- 三 最简单的 AndEngine 程序框架
package com.example.AndEngineExample; import org.anddev.andengine.engine.Engine;import org.anddev.an ...
- [Everyday Mathematics]20150220
试求 $$\bex \sum_{k=0}^\infty\frac{1}{(4k+1)(4k+2)(4k+3)(4k+4)}. \eex$$
- [转]linux之nl命令
转自:http://www.cnblogs.com/peida/archive/2012/11/01/2749048.html nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容 ...
- php 在线 mysql 大数据导入程序
1 <?php header("content-type:text/html;charset=utf-8"); error_reporting(E_ALL); set_tim ...