【APIO2016】Gap

【APIO2016】Gap

交互题

对于30%的数据,直接从s=0,t=1e18开始,每次让s=mn+1,t=mx-1,每一次可以得到两个,可以在(n+1)/2的时间内得到

对于其他数据,我们先求出最大最小值,求出len=(mx-mn)/(n-1),这相当与是一个"平均数",如果我将区间分为若干段长度为len的区间,只记录每个区间内的最大值和最小值,这样被漏算的那些点,他们最多有len-1的贡献,而这个还达不到平均数,所以肯定不会影响答案,所以就可以在3*n以内求出序列有用的部分了。

恰的很紧,稍不注意可能就过不去某些点,我之前区间长度设的是len-1,会被极限数据卡掉。

 1 #include "gap.h"
 2 #define LL long long
 3 const LL inf=1e18;
 4
 5 LL max(LL x,LL y){
 6     return x>y?x:y;
 7 }
 8 LL min(LL x,LL y){
 9     return x<y?x:y;
10 }
11 long long findGap(int T, int N)
12 {
13     LL mn,mx;
14     LL ans=-inf;
15     LL s=0,t=inf,a[100005],cnt;
16     if(T==1){
17         for(int i=1;i<=(N+1)/2;i++){
18             MinMax(s,t,&mn,&mx);
19             s=mn+1;t=mx-1;
20             a[i]=mn;a[N-i+1]=mx;
21         }
22         for(int i=2;i<=N;i++)ans=max(ans,a[i]-a[i-1]);
23     }
24     else {
25         MinMax(s,t,&mn,&mx);
26         LL len=(mx-mn)/(N-1),Max=mx;
27         a[++cnt]=mn;
28         for(LL l=mn+1,r=l+len;l<=Max;l=r+1,r=l+len){
29             MinMax(l,min(r,Max),&mn,&mx);
30             if(mn!=-1){
31                 a[++cnt]=mn;
32                 if(mn!=mx)a[++cnt]=mx;
33             }
34         }
35         for(int i=2;i<=cnt;i++)ans=max(ans,a[i]-a[i-1]);
36     }
37     return ans;
38 }

原文地址:https://www.cnblogs.com/hyghb/p/8428308.html

时间: 2024-10-12 23:47:14

【APIO2016】Gap的相关文章

UOJ #206. 【APIO2016】Gap

有 NN 个严格递增的非负整数 a1,a2,…,aNa1,a2,…,aN(0≤a1<a2<?<aN≤10180≤a1<a2<?<aN≤1018).你需要找出 ai+1−aiai+1−ai(0≤i≤N−10≤i≤N−1)里的最大的值. 你的程序不能直接读入这个整数序列,但是你可以通过给定的函数来查询该序列的信息.关于查询函数的细节,请根据你所使用的语言,参考下面的实现细节部分. 你需要实现一个函数,该函数返回 ai+1−aiai+1−ai(0≤i≤N−10≤i≤N−1)中

BZOJ 4584 【APIO2016】 赛艇

题目链接:赛艇 讲道理好好的Boat为啥要翻译成赛艇呢--题面中不也是划艇么-- 这道题考虑一下dp.由于划艇数量过于庞大,所以肯定不能直接记录到dp状态中.所以一个想法就是把数量离散化,然后把每个学校的数量在哪一段内记录下来.也就是说\(f_{i,j,k}\)表示前\(i\)个学校,第\(i\)所学校派出的划艇数量在区间\(j\)内,并且区间\(j\)内共有\(k\)个学校的方案数.然后分类讨论一下转移: 当\(k\ne 1\)时,有: \begin{aligned}f_{i,j,k} &=\

UOJ#204 【APIO2016】Boat

Time Limit: 70 Sec  Memory Limit: 256 MBSubmit: 559  Solved: 248 Description 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着个划艇学校,编号依次为到.每个学校都 拥有若干艘划艇.同一所学校的所有划艇颜色相同,不同的学校的划艇颜色互不相同.颜色相同的划艇被认为是一 样的.每个学校可以选择派出一些划艇参加节日的庆典,也可以选择不派出任何划艇参加.如果编号为的学校选择 派出划艇参加庆典,那么,派出的划艇数量可

dp 可并堆 uoj205【APIO2016】Fireworks

http://uoj.ac/problem/205 这题好强啊 设状态\(f[id][t]\) 为一个点子树内所有的点在\(t\)时间完成的最小的代价 通过观察可以发现 \(f\)值形成了一个下凸包 在区间\([l, r]\)取最小值 考虑暴力转移 更新父节点答案 以及暴力合并上一段凸包 复杂度\(O((n + m) ^ 2)\) 列出转移方程之后 \(x\)的斜率分别为\(-1, 0, 1\) 发现本质上是对一段凸包向上平移 再新增两个拐点(凸包上的拐点) 发现这个凸包的形态只和拐点的数量有关

【loj2567】【APIO2016】划艇

题目 \(N\)个位置,每个位置要么不选,要么选\([ a_i, b_i ]\)中的一个数: 问最后的单调上升序列(mod 1e9+7)有多少种: \(1 \le N \le 500\) 题解 orz abclzr 直接\(dp\)最后一位是什么数字的话只能得到31分 将数字离散化分段,第\(i\)段为\([l_i,r_i)\),设\(f_{i,j}\)表示第i个位置选的数字在第j段的方案数(第0段表示没有) \[ f_{i,j} \ = \sum_{k=0}^{i-1} \sum_{l=0}^

【QT】找茬外挂制作

找茬外挂制作 找茬游戏大家肯定都很熟悉吧,两张类似的图片,找里面的不同.在下眼神不大好,经常瞪图片半天也找不到区别.于是乎决定做个辅助工具来解放一下自己的双眼. 一.使用工具 Qt:主要是用来做界面的 OpenCV: 用于图像处理 C++: 基本实现语言 Qt中OpenCV的配置在[QT]OpenCV配置中讲过了,不会配置的可以看看. 二.实现方案 我要做一个通用的找茬辅助工具,即可以在所有PC找茬游戏中使用.这意味着我们不能通过获取游戏窗口句柄来定位游戏界面.那怎么办呢?灵光一闪,我想到了截图

【分布式计算】DFS &amp;amp;&amp;amp; BigTable

1.背景 分布式计算的发迹应该是google在2003年发表的三篇paper.各自是GFS.MapReduce.BigTable. 当中MapReduce大家都非常熟悉了.不懂的同学也能够看看我之前写的文章[分布式计算]MapReduce的替代者-Parameter Server 为什么google会搞分布式计算这件事儿呢,由于在那个年代每天会产生几个T的日志,可是当时的磁盘仅仅同意存储几百G的文件,07年之前淘宝的全部数据都是用完就删除的,由于没地方存.后来,人们认识到数据是值钱的,所以须要一

【TYVJ】QQ农场(最大流+最大权闭合图)

http://tyvj.cn/Problem_Show.aspx?id=1338 时间才排到rank7,还不快啊囧.isap我常数都写得那么小了... 最大权闭合图看我另一篇博文吧 此题很明显的模型. 首先我们先染色,使整个图黑白相间,其中我们只需要在黑色点向对应的上下左右白色节点连边,很明显,这些节点都有权值,我们需要求的是最大权,那么就按我的博文那样来做即可. 用sum-最小割就是答案. #include <cstdio> #include <cstring> #include

最大权闭合图 &amp;&amp; 【BZOJ】1497: [NOI2006]最大获利

最大权闭合图详细请看胡伯涛论文<最小割模型在信息学竞赛中的应用>,我在这里截图它的定义以及一些东西. 假设我们有一个图,点集的出边都是连到点集的,那么称这个为闭合图.现在这些点集都有个权值,我们要选择某个闭合图使得权值最大. 回到此题: 最大获利这一题,我们可以这样看,用户群和中转站为带权的点集,用户群的权为收益,中转站的权为负的成本,即0-成本,用户群向其中两个中转站连弧,那么这个就是一个闭合图. 我们要求这个闭合图的权值和最大,即最大收益,那么就能转移到上面的求最大权闭合图的做法去了. 做