Examples

2022-12-24 #19 也不愿在拥抱过浓墨重彩的热烈后 被迫离开

——霾《八重回归》

昨天打了八个小时文明六,自入手后第一次胜利啊!(王子难度,朝鲜科技胜利)

感觉一整把打下来还有很多瑕疵。。。

upd:昨天与今天加起来打了十八小时。

昨晚 vp 了一下 2022 CCPC Guilin

B 题没写完有点可惜。

感觉这场好难啊,被签到题整自闭了。

93 I Invincible Hotwheels

其实也不是很难,但我为啥不会。。。

类似 CF1483F Exam 地枚举长串,并枚举其一个前缀,取出最长、次长的出现过的后缀,那么最短串、次短串一定取自这些串。(找这两个串只用 ACAM 预处理一下)

不妨把最短串次短串对应区间塞到一个集合 \(S\) 里,并令一个区间的颜色为其对应串的编号,那么一个区间 \([l,r]\) 能成为短串当且仅当:

  • 包含它的区间存在,且均为同一颜色;
  • 该串所有出现位置均作为最长、次长后缀。

第一个就是个二维数点,第二个在 fail 树上标记一下就好了,复杂度 \(O(n\log n)\)

94 H Hysteretic Racing

比较简单,没时间开。

注意走一个环后代价固定,所以我们可以只考虑前 \(n\) 步。

一条路径的代价就是 \(\sum_{i=1}^n a_i\max_{j=1}^ib_j\) 状物,维护可以考虑使用兔队线段树。(习惯叫这名字了)

那么基本就做完了,区间推平 \(1\log\),区间加 \(2\log\),线段树二分 \(2\log\)

回忆兔队线段树方法:

  • 若前缀最大值 \(v\) 小于左儿子的最大值,那么其不会影响到右儿子,递归左儿子解决;
  • 否则,其会将左儿子推平,只需递归右儿子。

95 J Permutation Puzzle

虽然这是个签到,但我觉得这题也挺难(其实是与 CF1718D Permutation for Burenka 一模一样的套路)

使用拓扑可以求出每个位置放置的数的上下界,若没有 DAG 限制,我们可以直接套用经典贪心。(把区间按右端点排序扫描,每次取最小的值)

但是事实上上述贪心无解则原问题无解,若有解一定是原问题的解。因为 DAG 的性质,若 \(u\rightarrow v\),则 \(L_u+1\leqslant L_v,R_u+1\leqslant R_v\)\(u\) 能匹配到的数一定小于 \(v\)

96 牛客练习赛 102F 黑鸟

这题为啥没人改。

先用线段树判个无解。

将双端队列看成两个栈,单独处理出匹配关系。结论:令失配的删除操作数量为 \(k\),我们只会 pop 掉前 \(k\) 次加入操作。

感性理解一下,失配 pop 操作时某个栈一定为空,此时另一个栈 push 的数恰好是一段连续的时间。

有了这个结论就好做了,枚举左端点扫描线计算失配的 pop 操作数量,再枚举右端点扫描线线段树二分一下,复杂度 \(O(n\log n)\)

97 uoj#418. 【集训队作业2018】三角形

我们不妨称“操作 \(x\)”为放 \(w_x\) 个石子在 \(x\) 结点上,并将其儿子所有石子回收。

先考虑全局答案,即操作 \(1\) 需要的代价。

那么所有结点肯定都操作过依次,把这个操作序列拿出来,那么无非是解决一个这样的问题:

定义二元组加法为 \((a_1,b_1)+(a_2,b_2)=(a_1+a_2,\max(b_1,a_1+b_2))\)。有 \(n\) 个二元组 \((a_i,b_i)\),我们要任意排列这些二元组,最小化二元组之和的右值,这些加入一个结点前要保证其所有儿子都加入过。

“加入一个结点前要保证其所有儿子都加入过”限制很难处理,但我们有“加入一个结点前要保证其父亲加入过”的经典贪心。(monster hunter 贪心)

时光倒流,二元组加法只需稍微改改,然后每次取出全局最优,将其与父亲合并表示选了父亲后立即选这个儿子即可。

考虑怎么求每个结点的答案,我们把这个顺序预处理出来,线段树合并出每个结点的答案即可。

复杂度 \(O(n\log n)\)


下午打了 InfOJ Beginner Round 3,遗憾不会 Div1 B 难度题。(会同复杂度做法,但常数大了一点点)

顺便一提,那场的构造题是平衡三进制的板板。

98 P8912 [RC-06] ijk

你可能疑惑博主为什么要写绿题题解,因为博主就是这么菜(

枚举三元组 \(ijk\leqslant n\) 的复杂度是 \(O(n\log^2 n)\) 的。

99 ABC283H Popcount Sum

这题不会做???这题不会做???这题不会做???这题不会做???这题不会做???

一个经典的转化是 \(\sum_k\sum_{i=1}^n[i\bmod m=r][i\bmod 2^{k+1}\geqslant 2^k]\)

做到这步不会做了。

事实上:

\[\sum_k\sum_{i=1}^n[i\bmod m=r][i\bmod 2^{k+1}\geqslant 2^k]\\=\sum_k\sum_{i=0}^{n'}[(im+r\bmod 2^{k+1})\geqslant 2^k]\\=\sum_k\sum_{i=0}^{n'}\lfloor\frac{im+r+2^k}{2^{k+1}}\rfloor-\lfloor\frac{im+r}{2^{k+1}}\rfloor \]

类欧即可。

(最后一步与之前做过的 ARC111E Simple Math 3 一模一样)

posted @ 2022-12-24 10:43  xiaoziyao  阅读(191)  评论(4编辑  收藏  举报