Codeforces Round 960 (Div.2)
A
非常容易观察到性质,注意 Alice 为先手,发现当 \(a_{\max}\) 的个数为奇数时显然能 win,但如果 \(a_{\max}\) 的个数为偶数且有一个数具有奇数个可以作为跳板,那么也能 win,否则就 lose。
B
结论:\(presum_x \geq 2 + presum_{y - 1} \geq 2 + \min{presum_i} \geq 1 + \max{presum_i}\),后缀和同理。
C
模拟一下容易发现每次操作后整个数组都会向后移动。
我们首先对数组进行一次操作模拟,发现整个数组就变成单调不降的了。
之后我们开始观察,对于一个连续的序列 \(a[l, r] = x (l \lt r, x \gt 0)\),在一次运算之后,得到一个新的限制 \(a[l + 1, \min{(r + 1, n)}] = x\) 成立,然后再给结论:如果数组中所有非零连续段(出去最后一段)的长度都大于 \(1\),那么数组就遵循一个 “右移” 定律。
对于 “右移” 数组,不难得到 \(b_i \lt b_{i + 1} \lt b_{i + 2}\),可以推断出 \(b_i = a_i, b_{i + 1} = a_{i + 1}\),并且至少有 \(a_j = a_{i + 1}(j \leq i)\) 成立,这也就说明 \(a\) 并不是非单调递减的,也就是说经过 \(2\) 次运算总能得到一个 “右移” 数组。
D
考虑贪心,对于 \(a_i\) 足够大的情况,我们一定会在 \(i\)-th 行上使用操作 \(2\),具体的 \(i\) 是多少呢?
对于 \(a_i \geq 5\) 的情况直接使用操作 \(2\) 即可,因为至少需要 \(3\) 个 \(2 \times 2\) 的网格来覆盖,而在 \(i - 1, i, i + 1\) 行进行三次 \(2\) 操作带来的收益显然更大。
然后讨论一下 \(a_i \lt 5\) 的情况,考虑从左到右:
- 没有黑色格子
- 有 \(\leq 2\) 个黑色格子,放入一个 \(2 \times 2\) 的子网格
- 有 \(\gt 2\) 个黑色格子,直接进行一次 \(2\) 操作即可
总结一下,对于 \(i\)-th 行,对于当前行来说 \(i - 1\)-th 的影响只有:
- 不受影响
- 第 \(3\) 列和第 \(4\) 列的单元格被涂成白色
- 第 \(1\) 列和第 \(2\) 列的单元格被涂成白色
E
交互题。
当我们查询子树的时候,如果返回 \(0\),那么删除整棵子树。注意到我们可以查询任意叶子节点,那么如果返回了 \(1\) 就直接跳出,否则鼹鼠就要往父节点跑,再考虑如果查询子树时返回了 \(1\),那么就再查询将其驱逐出当前的子树跳往父亲。
朴素的做法处理起来太麻烦,而且 Easy & Hard 还需要做优化,官方的题解给的做法太麻烦了,给一个更优的解法:
查询任意的叶子节点 \(70\) 次(均摊),然后删除 \(dep_{\max} - dep_v + 1 \leq 70\),那么树就被拆分成了 \(\leq 70\) 条链,check 一遍跑过去就可以了,这样跑得飞快。
F
无端联想 % 你赛的最大 \(C_{\triangle}\),主席树挂大分……
非常明显需要使用线段树维护,明确我们需要做什么.
注意到对于一份 “局部” 的最大多边形线段 \([l, r]\) 必须满足 \(\min{a_{l - 1}, a_{r + 1}} \geq 2 \cdot (a_l + \dots + a_r)\),当然包括 \(l = 1, r = n\) 的情况。
当且仅当 \(\sum_{i = 1}^{r} a_i \leq 2 \cdot a_i\) 时,定义区间 \([l, r]\) 的后缀 \([i, r]\) 为 special,同样的前缀也定义为 special。
观察性质,最多有 \(O(\log{(\max a)})\) 个 special 后缀,因为从定义中不难得到一个 special 之和至少是前一个 special 之和的 \(2\) 倍,因此我们可以合并左边区间的 special 后缀和右边区间的 special 前缀,这部分可以使用 two-pointers 来完成,然后就可以获取到一个跨越区间的答案了。
Codeforces Round 960 (Div.2)的更多相关文章
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
- Codeforces Round #268 (Div. 2) ABCD
CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...
- 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts
题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...
随机推荐
- git 乱操作
https://www.cnblogs.com/qybk/p/10880901.html 错误提示一样,只是我是在我自己的分支(xxx_dev)里.所以以下要改一下. git pull origin ...
- keras各种问题
还是不熟悉造成的,keras的各种包使用起来真是有点小麻烦.导入方式不同就容易引起错误,也不提示你导入的库不存在,但是就是调用的时候报错. 比如近期写文章想画模型图,plot_model模块导入出问题 ...
- CSS – Width & Height Auto and Percentage
前言 这个非常基础, 我在学 W3Schools 之前就已经会了, 所以之前一直没用记入起来. 但偶尔遇到一些场景时还是会被坑到. 所以特别写这一篇, 提升记忆. width / height aut ...
- 某游戏厂商 hdfs 迁移 distcp failing write attempt Tried pipline recovery 5 times without success 问题排查
报错截图: 从报错信息看是 distcp 起的map 任务在写 hdfs 的 pipline 失败了,并且重试了5次没有成功,所以这个 task 直接抛出错误失败被 kill 了. 先说解决办法: 清 ...
- Flutter 2.8 正式发布
文/ Tim Sneath,Flutter & Dart 产品经理 Flutter 已经更新到 2.8 正式版,发布了多项新特性和改进以不断改善移动和 Web 端的开发体验,同时也正在将桌面端 ...
- [TK] 寻宝游戏
在树上标记若干个点,求出从某个点走过全部点并回到该点的最小路径. 有多次询问,每次询问只改变一个点. 首先是一个暴力的思路. 会发现,从标记点中的其中一个开始走,结果一定更优,并且无论从哪个点开始走, ...
- IT运维工单高效协同,助力打造一站式运维方案
随着经济全球化的发展趋势,信息系统在企业运营中占据着愈发重要的位置.业务系统越来越多,用户对信息系统的依赖性越来越强,关键业务系统的中断都将导致企业业务.服务的中断,极大的影响了企业业务稳定运行和持续 ...
- Resource Acquisition Is Initialization
在 C++ 中,资源获取即初始化(RAII, Resource Acquisition Is Initialization)是一种管理资源的编程惯用法.其核心思想是将资源的获取和释放绑定到对象的生命周 ...
- 手写 p-map(控制并发数以及迭代处理 promise 的库)
介绍 p-map 是一个迭代处理 promise 并且能控制 promise 执行并发数的库.作者是 sindresorhus,他还创建了许多关于 promise 的库 promise-fun,感兴趣 ...
- css实现直线拉伸
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...