BZOJ 4123 [Baltic2015] Hacker 解题报告
首先,Alice 会选择一个长度为 $\lfloor\frac{n+1}{2}\rfloor$ 的区间,我们把这个长度记为 $len$。
有这么一个结论:令 $F_i$ 为覆盖 $i$ 点的所有长度为 $len$ 的区间的元素和的最小值,那么答案就是 $F_i$ 的最大值。
因为 Bob 可以控制 Alice 最后选择的是什么区间。
【扯淡 ing】大概是这样子:

假设 Alice 一开始选择的是红色的点 $i$,并且蓝色的线以左所覆盖的区间和就是 $F_i$,那么对于 Bob,他就可以选择绿色的点,然后 Alice 逆时针选的话,Bob 就顺时针选 $\dots$ 总之,Bob 的选择只要关于那个对称轴与 Alice 对称就可以了。
所以我们就可以用个单调队列什么的就可以做了。
时间空间复杂度均为 $O(n)$。
#include <cstdio>
#define N 500000 + 5
#define INF 1000000007 int n, A[N], Sum[N << ], q[N << ]; inline int getint()
{
char ch = '\n';
for (; ch != '-' && (ch > '' || ch < ''); ch = getchar()) ;
int f = ch == '-' ? - : ;
int res = ch == '-' ? : ch - '';
for (ch = getchar(); ch >= '' && ch <= ''; ch = getchar())
res = (res << ) + (res << ) + ch - '';
return res * f;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("4123.in", "r", stdin);
freopen("4123.out", "w", stdout);
#endif n = getint();
for (int i = ; i <= n; i ++)
A[i] = getint();
for (int i = ; i <= (n << ); i ++)
Sum[i] = Sum[i - ] + A[i > n ? i - n : i];
int len = n + >> , Max = -INF, head = , tail = ;
for (int i = len; i < (len << ); i ++)
{
for (; head <= tail && Sum[i] - Sum[i - len] <= Sum[q[tail]] - Sum[q[tail] - len]; tail --) ;
q[++ tail] = i;
}
for (int i = (len << ) - ; i <= n << ; i ++)
{
for (; head <= tail && q[head] + len <= i; head ++) ;
for (; head <= tail && Sum[i] - Sum[i - len] <= Sum[q[tail]] - Sum[q[tail] - len]; tail --) ;
q[++ tail] = i;
int t = Sum[q[head]] - Sum[q[head] - len];
Max = Max > t ? Max : t;
}
printf("%d\n", Max); #ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
return ;
}
4123_Gromah
BZOJ 4123 [Baltic2015] Hacker 解题报告的更多相关文章
- BZOJ 4619 Swap Space 解题报告
今天是因为David Lee正好讲这个题的类似题,我才做了一下. 本题是world final 2016的一道水…… 题目地址如下 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 2839: 集合计数 解题报告
BZOJ 2839: 集合计数 Description 一个有\(N\)个元素的集合有\(2^N\)个不同子集(包含空集),现在要在这\(2^N\)个集合中取出若干集合(至少一个),使得 它们的交集的 ...
- BZOJ 1367 [Baltic2004]sequence 解题报告
BZOJ 1367 [Baltic2004]sequence Description 给定一个序列\(t_1,t_2,\dots,t_N\),求一个递增序列\(z_1<z_2<\dots& ...
- BZOJ 1044 木棍分割 解题报告(二分+DP)
来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limi ...
- BZOJ 4341 [CF253 Printer] 解题报告
乍一看这个题好像可以二分优先度搞搞... 实际上能不能这么搞呢...? 我反正不会... 于是开始讲我的乱搞算法: 首先肯定要把任务按照优先度排序. 用一棵在线建点的线段树维护一个时刻是否在工作. 然 ...
- BZOJ 4036 [HAOI2015] Set 解题报告
首先我们不能一位一位的考虑,为什么呢? 你想想,你如果一位一位地考虑的话,那么最后就只有 $n$ 个数字,然而他给了你 $2^n$ 个数字,怎么看都不对劲呀.(我是因为这样子弄没过样例才明白的) 所以 ...
- BZOJ 3288 Mato矩阵 解题报告
这个题好神呀..Orz taorunz 有一个结论,这个结论感觉很优美: $$ans = \prod_{i=1}^{n}\varphi(i)$$ 至于为什么呢,大概是这样子的: 对于每个数字 $x$, ...
- BZOJ 4146 [AMPPZ2014] Divisors 解题报告
这个题感觉比较小清新... 我们记录每个数出现的次数 $T_i$. 首先依次枚举每个数字,令 $ans = ans + T_i \times (T_i - 1)$,然后枚举这个数的倍数,令 $ans ...
- BZOJ 3971 Матрёшка 解题报告
很自然想到区间 DP. 设 $Dp[i][j]$ 表示把区间 $[i, j]$ 内的套娃合并成一个所需要的代价,那么有: $Dp[i][i] = 0$ $Dp[i][j] = min\{Dp[i][k ...
随机推荐
- SAX - Hello World
SAX 是一种事件驱动的 XML 数据处理模型.对于 DOM 模型,解析 XML 文档时,需要将所有内容载入内容.相比 DOM 模型,SAX 模型更为高效,它一边扫描一边解析 XML 文档.但与 DO ...
- sql常识- UNIQUE
SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 ...
- 【网络收集】数据库中字段类型对应C#中的数据类型
数据库中字段类型对应C#中的数据类型: 数据库 C#程序 int int32 text string bigint int64 binary System.Byte[] bit Boolean cha ...
- Swift属性
属性的存储 属性的主要作用是存储数据,可以常量属性和变量属 性: struct FixedLengthRange { var firstValue: Int let length: Int } var ...
- PDA库位商品出库适配算法
功能描述 代码实现 算法需求 回到顶部 功能描述 在PDA上面,通过扫描订单号,查询该商品的款号,尺码,订单数:同时适配仓库库位商品[SKU],显示该商品所在库位,库存数量,适配数. 因为PDA界 ...
- easyloader [easyui_1.4.2] 分析源码,妙手偶得之
用easyui很久了,但是很少去看源码. 有解决不了的问题就去百度... 今日发现,easyui的源码不难懂. 而且结合 easyloader 可以非常方便的逐个研究easyui的组件. 但是, ea ...
- CodeBlocks对C++模板的支持
坦率的说CodeBlocks是一款不错的跨平台编译器,一般编写C/C++都是使用它,但最近在编写C++模板文件时,发现它对模板的支持并不是很好.具体表现在模板的定义与声明分开的问题上. 一般编写C/C ...
- VC6配置OpenCV1.0
懒得写字,故扫描:
- wp8 自定义相机+nokia滤镜+录制amr音频
demo截图: 代码量有点多,就不贴出来了. 备注: 1.自定义相机主要横竖屏时,对相机进行旋转. 2.播放amr格式可以在页面中直接添加MediaElement控件进行播放,或者使用Bac ...
- bootstrap-validator使用
bootstrap-validator是一款与bootstrap相结合的表单前端验证模块,官方网址:http://1000hz.github.io/bootstrap-validator/ 下面内容大 ...