【251121】CF2171 Div.3 vp 总结
老师说让我尝试体验快乐 AK,但是我失败了。
还是太菜了喵!
题目梗概
| 题目编号 | 题目名称 | 题目链接 |
|---|---|---|
| A | Shizuku Hoshikawa and Farm Legs | Link |
| B | Yuu Koito and Minimum Absolute Sum | Link |
| C1 / C2 | Renako Amaori and XOR Game (easy / hard version) | Link / Link |
| D | Rae Taylor and Trees (easy version) | Link |
| E | Anisphia Wynn Palettia and Good Permutations | Link |
| F | Rae Taylor and Trees (hard version) | Link |
| G | Sakura Adachi and Optimal Sequences | Link |
| H | Shiori Miyagi and Maximum Array Score | Link |
给的都是 VJ 的链接,带翻译。
赛时情况
也是被吓到了好吧,和 Div.1+2 的题量差不多,现在 Div.3 都这么强势了吗?
首先读题。A 一眼纯暴力,B 不会但好像是把 \(-1\) 都改成 \(0\),后面的题都没啥思路。C 怎么还带分 easy / hard version 的?坏。
秒 A。看 B。根据样例推翻自己“把 \(-1\) 都改成 \(0\)”的猜测,然后虚空思考。无效。又读了一遍题。我【】题读错了!对对就是 \(a_1\) 和 \(a_n\) 尽可能相等就对了。
推 C。准确来说是推 C1。推出来了开写,倒序判断。然后推 C2。咦咦咦我会了!虽然很感性证明不了,但是不想管了。开写开写。
搞定!做 D 做 D。推了大半天,噢,我会了!光速开码。码完后写错了一些,改改改。改改改。改对了。
由于 F 是 D 的加强版决定先想 F。思考。思考。思考。咋构造啊到底?思考失败,选择开 E。
这 E 是什么【】构造。推推推。推推推。找规律这一块……推了一个神神秘秘的 \(12\) 个数为周期的,额,规律数组,摇了摇发现,嗯,没多少问题,开写。
写完了,F G H 随机看题,还是决定想 F。
终于构造出来了!开写开写。时间不多了啊啊啊。码码码,码完了哦我码完了,样例过了噢耶!
噢耶你个死鬼头,离 AK 还有两题呢大哥。给我想。想。再想。H 会平方 DP 但是之后就不会做了。G 是毫无思路啊。
很生气,到最后还没肝出 G 和 H,愤怒交卷。也许我的实力就不配赛时切 G 和 H 吧……
分数分布
嗯,该过的题都过了,行。
赛后题解
A
纯暴力即可,枚举多少只鸡,看剩下的腿数是不是 \(4\) 的倍数。注意鸡的数量可以是 \(0\)。
B
观察发现需要最小化的就是 \(|a_n - a_1|\),因此只要其中有一个数不固定就尽可能让这两个数相等。中间的不固定数就全填 \(0\) 好了,为了最小化字典序嘛。
C1
如果原本的情况能平局,那么没有人能够胜出,因为即将胜的一方会被即将败的一方调整至平局,因此只存在平局情况。
否则的话,考虑倒序找第一个 \(i\) 满足 \(a_i \not= b_i\),隐含规则其实就是,谁的回合处理这个关键元素,谁就能赢,毕竟异或的性质且只有 \(0\) 和 \(1\) 嘛,那么只要看 \(i\) 的奇偶性情况就可以了。
C2
和 C1 同样的,原本情况能平局那就是平局。
之后的核心逻辑,就是在 C1 的基础上加了寻找关键元素位置的一个步骤。因为 C1 拆了二进制位后总是只有一位嘛,处理起来特方便,但 C2 这里就不同了要找到具体是哪一位最关键。
那这个关键位是哪里呢?首先求出原本情况,\(a\) 的是 \(A\),\(b\) 的是 \(B\)。求 \(D = A \oplus B\),\(D\) 的最高位 \(h\) 就是这个关键位了。求 \(a\) 和 \(b\) 两个数组中分别有多少个值在 \(h\) 位有值,记为 \(ca\) 和 \(cb\),奇偶性相同依然平局,否则就根据这个像 C1 一样倒序找就可以了。
D
拆分,连通块。
注意到选择一个中间点 \(mid\),拆成两个区间 \([1,mid]\) 和 \([mid+1,n]\) 之后,如果这两个区间分别形成的连通块相互之间连通不起来,说明什么?说明 \([1,mid]\) 这一段区间的最小值都比 \([mid+1,n]\) 这一段区间的最大值要大。只有这种情况是构不成的。那么前缀后缀 \(\min\) 一求,判断一下就完了。
E
显然构造题。周期性问题。尝试搞个以不知道啥长度为周期的排列,然后依着这个构造就行。
发现长度为 \(12\) 的 \(\{1,2,4,5,6,3,7,9,12,11,8,10\}\) 是不会有一组“坏索引”的,又发现其中的最大公约数都是 \(12\) 的约数,那么这就是一个完美的周期排列。
问题在于 \(n\) 不总是 \(12\) 的倍数啊,不是怎么办,就从余数对应的区间中取在范围内的按照上面那个周期顺序放好,会有“坏索引”,但是你可以依次尝试 \(1 \sim 11\) 所有情况,“坏索引”的个数都不会超过 \(6\),因此是完美的。
F
D 的加强版,判断方法讲完了,这边只讲如何构造这个树。
锁定 \(i\) 到 \(i\) 往后的后缀中最大的一个点 \(j\),\([i,j]\) 这一段连起来,再把 \(j\) 和 \(i\) 往前的前缀中最小的一个点连起来,就连通了,继续递推让 \(i = j+1\) 就可以啦!
G
考虑尽可能多的翻倍操作,找最小的 \(k\),让每个 \(i\) 都有 \(a_i \times 2^k \le b_i\)。接着让 \(c_i = b_i - a_i \times 2^k\),翻倍过程中可以在每个 \(c_i\) 二进制位为 \(1\) 的情况下多做一次 \(+1\) 操作,统计 \(\sum \operatorname{popcount}(c_i)\) 加进步数里。以及这期间也有调整顺序,同一位上先调谁再调谁最后调谁,用桶统计下然后阶乘算入方案数。最后就看累加答案那一块该怎么弄,先是总和阶乘,然后乘法逆元处理,除掉每种 \(i\) 的次数的阶乘,这样就能不重复。于是一开始要预处理阶乘和逆元操作,快速幂写好,时刻取模,就结束了。
H
首先可以考虑定义 \(dp_{i,j}\) 表示当前考虑前 \(i\) 个数且 \(a_i = i+j\)。由于 \(a\) 必须严格单调递增,我们通过转化可以变为 \(j\) 非递减。于是有转移 \(dp_{i,j} = \max_{k \le j} dp_{i-1,k} + v(i,j)\),至于这个 \(v\) 可以写个函数出来,是 \(\log\) 的时间复杂度。
但是这样过不去,尝试压维,弄成 \(dp_{j}\),于是 \(j\) 需要倒序枚举。但是依然不行,时间复杂度过不去,考虑用树状数组维护区间 \(\max\) 来处理这个东西。于是就结束啦!

浙公网安备 33010602011771号