agc026 题解

link

code

A

相邻的相同就把它改掉。模拟即可。

B

先把前面的一些情况特判掉。

注意最后落在的位置一定是形如 modb=a+d 的形式,判断一下在这个取模环上是否有 [b+1,c) 的数即可。

C

折半搜索。

先大力枚举左边的情况,把对应的右边的情况放在 map 里然后去查询。

D

一列一列放。

如果前面一列和当前列交的部分全部都是 01 交替,那么可以和上一列状态相同,否则必须取反,然后 > 上一列的部分可以乱选。

因此设 fi,j 表示前 i 列,从下向上的最长 01 交替段长度为 j 的方案数。

直接转移复杂度 nh,离散化一下就可以 O(n2) 了。

E

提供一个超级无脑做法。

想一下 dp,一个经典套路是从后向前 dp,这样只需要存字典序最大,因为如果从前往后,两个状态一个是另一个的前缀,这样不知道该取那个。

那么如果直接暴力转移是 O(n3) 的,考虑咋优化一下。

如果后面一个区间是和当前区间不交,那么只要选一个后缀最大值即可,这个可以开一个 gi 表示后缀最大值。

如果相交,有两种情况:abba

如果是 ba,容易发现这个区间中所有的 ba 都需要选,因此直接选最前面那个即可。

如果是 ab,所有 ab 区间不能交,依然是选最前面那个即可。

三种情况,只有三个转移,直接选即可。

为了方便,直接开 set 记录字符串。

比较卡常,但是讨论一下,上面三个转移可以更少。

F

只会 O(n3) 的区间 dp。

容易发现对于一个区间,先手答案显然大于后手。

如果 n 是偶数,那么先手要么选所有奇数位置要么所有偶数位置,因为不然的话后手可以选择去奇数的那半边,然后另一个区间变成后手先选,那肯定不优。

然后考虑奇数情况,前面先一直选偶数位置,某一个时刻选了奇数位置,此时剩余区间中,先手一定会得到所有的奇数位置。

那么就相当于是所有的偶数,然后翻转了一个区间。

二分答案,这样会有很多个满足条件的区间。

为了先手一定能缩成一个合法的区间,说明区间需要满足 l1=1,rk=n,ri+2=li+1

因此直接判定即可。

posted @   houzhiyuan  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
历史上的今天:
2022-03-21 浅谈矩阵在OI中的应用
2022-03-21 3月杂题选做(part 2)
2022-03-21 NOIP2021游记
2022-03-21 CSP-S 2021游记
2022-03-21 CSP2020+NOIP2020爆零记
2022-03-21 vp记录
点击右上角即可分享
微信分享提示
主题色彩