新年前做题记录

下面的这些做题记录很乱,基本上是这 3 个月的全部记录了。毕竟一周碰电脑的时间 <= 3h,剩下在家的时间大多数都用来睡觉和看乒乓球。

Codeforces Round 908

A: 操作相当于把 \([1,x]\) 挪到最后。最终状态明确,于是考虑倒着维护,用一个指针 \(p\) 表示当前的末元素。若 \(a_p>n\) 则无解。模拟 \(\mathcal O(n)\) 步即可。

B: 显然可以猜一个下界,LIS 不变。降序排序 \(b\),双指针把 \(>a_i\)\(b\) 的元素插入 \(a_i\) 前,剩下的输出就行。不难发现这样你选 \(b\) 中的元素一定是劣的。

C: 观察样例,注意到有不少 0。不难联想到有 \(\mathcal O(\sum n)\) 个有效 \(c\),总共有 \(\sum r - \sum l + 1\) 个可能值,所以如果 \(\sum r - \sum l + 1 > \sum n\) 那么答案就是 0。此时值域变成 \(\mathcal O(n)\)

枚举元素 \(x\),尽量选上 \(\neq x\) 的数,有一些序列必须选一些 \(x\),其他数列可以多贡献一些 \(\neq x\) 的数,算一下贡献即可。用 map 维护,时间复杂度 \(\mathcal O(m\log n)\)

D: 看完就感觉直接贪心构造就行。先满足限制最严的架子,每个架子优先选那些最多的方块。魏老师说这样是对的,但我写的有问题判 -1 判的不对。照着改了一下。感觉这种写法很优美。


USACO 2023 Open Platinum

T1

动态 dp 可以 \(O(q\log n\times 9^3)\) 强行通过。

T2

结论题,先不补了。

T3

感觉这道题还是比较深刻的。思路是复读 by_chance 老师的题解,加点自己的碎碎念。

motivation 在哪?最朴素的贡献计算方法显然是 \(\sum deg(deg-1)\),贡献的形式并不简洁,只能基于得到更多的信息,也就是嗯维护 \(deg\)。而这个操作模式注定直接维护图的结构不行。

贡献形式不太好入手,只能基于这个操作模式做一些转化。

以我做过的题来讲,这类删点 / 边再加点 / 边的常见转化是,构造等价的操作。这可能需要一些灵感,但这道题的转化是比较套路的。大概想不出来可以嗯背。

具体地,将边转化成点。原树上的点设为黑点,边对应的点设为白点。一次操作等价于将一个黑点和其所连的白点缩点。

注意到原题所给的操作顺序很特殊,以 \(n\) 为根建树,就能把要缩的点统一指向当前黑点的父亲节点。这样就可以并查集维护了。

牛客挑战赛 71

D. 权值和 plus

这个限制看起来挺强,但感受一下,似乎可以全压到 \(a_k, b_k\) 上,所以也许贡献计算方式是关键。

退役有点久了,想不起来拆贡献这个东西。

那么我们考虑拆开这个贡献,单独计算每个元素出现的次数。因为位置不关键,最后乘上一个 \(k!\) 就行。

然后考虑一个子问题:有多少子序列乘积 \(\bmod \ P = N,M\)。这个是不是 SDOI2015 序列统计。做出来这个子问题则原问题自然得解。

不过我还是愿意把它当作数论问题考虑的。

实在不会了看题解。。。不是 byd 怎么真是多项式啊。跑路了。

E. 寻找中位数 plus

这几段纯自己思考的时候乱写,非常意识流,想学做法的可以不用看了。。。

\(k\) 是固定的,直接 \(<k\) 的设成 \(-1\)\(\ge k\) 的设成 \(1\),然后看 \([l, r]\) 能取到的范围是不是就行了。

不行,这样做是基于端点固定的。

首先你发现可以只判断长为 3(\(k\) 向两端延申的情况)。

然后考虑 \(k\) 向一端延申的情况。这样就可以只考虑一边了。呃但是你发现这个 shaber \(k\) 好像有点难搞,按照我们上面这个判断方式。

那怎么办?应该是有一些结论的。顺着上面这个思路来,遇到另一个 \(k\) 且还没有能成型的子段时,显然我们只能全取到 \(>0\)\(<0\) 的数。那这个时候是非常不好的。现在有两种可能,要么连上这个 \(k\) 我们的子段就合法了,要么还得往左走。但往左走感觉,如果我连上之前的全部肯定不优。

哦好像是的,如果我连上之前的全部,不管左边是不是和右边同号,那我要么不全取要么全不取,反正两个 \(k\) 连不上,这样就又变成了 \(k\) 向左右延申的情况。而刚刚已经分析过了,这种情况只需要判断所有长为 3 的子段即可。

为什么 edge 在给我推碧蓝航线。

USACO 2023 FEB Platinum

A

怎么感觉,这个东西用 ODT 能秒啊???

B

去年省选模拟赛就做过了。高维前缀和。

C

前面忘了,后面忘了。

杂题

CF1637E

只是离开了几天,至于这么迟钝么。

经典结论:\(cnt_x\) 只有 \(\mathcal O(\sqrt n)\) 种取值。\(\sum cnt_x=n\)

自然的想法是 \(cnt_x, cnt_y\) 枚举完了不太好维护,所以考虑枚举 \(x,cnt_x\),然后枚举所有 \(\le cnt_x\)\(cnt_y\),算出对应的 \(\max y\),因为至多 \(m\) 次冲突所以枚举次数 \(\sum cnt_x + m = n+m\)

CF1332G

手摸一下发现只有 \(|b| = 3/4\) 合法。似乎是一个 dilworth 定理的推论。

  • \(|b|=3\)

不妨设为 \(a_i,a_j,a_k\),那么 \(a_j\) 是极值。枚举 \(j\),向左向右找到第一个不等于 \(j\) 的数,如果是极值就成立。

  • \(|b|=4\)

此时为 \(a_i,a_j,a_k,a_q\),那么 \(a_j, a_k\) 是极值,且 \(a_i,a_q\in (\min(a_j, a_k), \max(a_j, a_k))\)

直接拆成偏序不仅困难而且多余。注意到复杂的偏序关系可能导出一些支配关系。我们倒序枚举 \(i\),建立两个单调升 / 降(均非严格) 的单调栈,此时 \(a_j, a_k\) 只有可能在单调栈中取到。到此为止一切正常。

key observation: 由于 \(a_q\)\(a_j, a_k\) 的关系,它必然被弹出单调栈。于是维护 set \(S\) 表示不在栈中的元素。找到 \(i\) 在栈中后面第一个不等于 \(a_i\) 的位置 \(p_1, p_2\),找 \(S\)\(\max(p_1, p_2)\) 的后继记为 \(q\),然后二分出 \(a_j, a_k\) 即可。此时 \(q\) 一定最优。

后面是常规的扫描线处理不再赘述。

inspiration: 我从哪一步开始想错了?大概是直接去考虑偏序的那一步。为什么错了?题目的特殊信息没有使用好;支配性浅尝辄止地探了探就跑路了。Key Observation 完全没注意到。

Improve:

  1. 关注题目中异于经典问题的特殊条件。
  2. 任何思路,即使暂时搁置,在找到正确解法之前都不能浅尝辄止。它们都是通往正解的钥匙。
  3. Key Observation 注意不到属于个人能力问题。

ABC180F

学 whk 学的吗。这么唐啊。

不难想到差分转化,将 \([\max = L]\) 转化为 \([\max \le L] - [\max \le L-1]\) 这样就把限制拆开了。

然后考虑 dp。\(f(i,j)\) 表示 \(i\) 个点用 \(j\) 条边且连通块大小都不超过 \(L\) 的方案数。

转移的时候枚举 \(1\) 所在的连通块大小 \(k\)(这个经典的手法忘了,真把自己气笑了,当时学考物理考场上闲的没事推题的时候明明还记得这个啊?),方案数 \(\binom{i-1}{k-1}\),要满足 \(k\le L\),分两种情况:

  • 环:挑一个位置断环为链,然后 \((k-1)!\) 种方案。但是由于对称性要 \(/2\)。注意 \(k=2\) 的时候,要特判。
  • 链:\(k!\) 种方案,由于对称性还是要 \(/2\)\(k=1\) 的时候特判。

时间复杂度 \(\mathcal O(n^2m)\)

JOISC 2019

只写点有价值的。

在你弄明白一件事之前,先不要问这件事为什么是对的。

Day 1 T3

真的不知道这种题是怎么获得灵感的。。。我只能尝试猜一猜 motivation。

可能的方向是,尝试找出数学性质是困难的,一般我们会开始增量构造或者贪心。

稍微画一画 \(n = 2\) 的情况会有一个比较明显的贪心思路:每次选 \(n\) 等分点最短的那个人进行划分。然后你发现这个东西很对,win。

实质上可能还是因为,数学性质看起来并不好用,如果它可做的话,相应地,限制就不会太强,构造也可以比较松。

Day 2 T1

限制很难,life is hard。不过 abs 的限制是假的,毕竟 \(|a - b| = \max(a - b, b - a)\) 于是正反做两遍就行。

考虑这个限制。通常情况下我们会得到一个代数式并进行化简统一为一个规整的形式,但是注意到这个限制相当于已经给出了几何意义,并且两个限制相当独立,试一试就发现做不到。

此时留给我们的思路只剩下拆开强行处理。我们进行序列扫描线,这里我陷入了一个误区,查询的时候左端点 \(< l\) 了怎么办但是其实把答案记录在左端点上就全对。。。因为扫描线本身自带了对右端点范围的限制。。。

然后考虑拆分。我们对 \(r\) 扫描线,自然会用 \([j - b_j, j - a_j]\) 这个限制去做更新,但 \(i\) 的限制不好处理,我们需要一种手法 “延迟” \(i\) 的存在。其实是经典的 trick:\(i + a_i\) 处加入 \(H_i\)\(i + b_i + 1\) 处再更新为 \(-\infty\) 即可。

后面不太会的部分:线段树上维护 \(P_i, Q_i\)\(i\) 的信息由 \(P\) 保存,然后 \(j\) 更新的时候 \(Q_k\gets \max(Q_k, P_k - H_j)(k\in [j - b_j, j - a_j])\),线段树上打 tag 就行。不清楚算不算历史最大值,没有了解过。

问题:

  • \(|a - b| = \max(a - b, b - a)\) 没有第一时间反应过来。
  • 扫描线的时候唐氏了,把 \(i\) 存进去而不是把 \(H_i\) 存进去。。。你要 \(i\) 干什么啊。。。
  • 线段树维护信息:基本功不好咯。回去学学历史版本和。

Day2 T2

问题相当一般化,并且时间限制和数据范围很牛魔。

trivial 的 dp 是 \(f_{i,j}\) 表示 \(A_i, B_j\) 做完,此时的最大得分。

感觉只有转移形式稍微特殊一点了。。。那来看转移。不用过于心急,不妨先来看看 \(f_{i, *}\) 的情况。

没招了,看题解。


似乎是经典的。这类 dp 要联想到走格子的过程,虽然想到了但我并不会用这个网格图所以就弃了这个思路。。。

注意到网格图上转化要彻底一点,限制和贡献都要扔到上面。

我们发现对于 \(A_i\) 有一个最大的对应的 \(j\),记为 \(limy_i\),同理对 \(B_j\)\(limx_j\)

扔到平面上就是 \((i, limy_i)\) 在路径左上,\((limx_j, j)\) 在路径右下时会产生贡献。

统一形式,转化为 \((i - 1, limy_i + 1)\) 在路径右下会有 \(-P_i\) 的贡献,一开始的 \(P_i\) 直接加到 \(ans\)

此时我们有转移方程 \(f_{x, y} = \max(f_{x - 1, y} + s(x - 1, y), f_{x, y - 1})\),这里相当于贡献延后计算了。\(s(x, y)\) 表示 \((x, 1\sim y)\) 的贡献点权和。

注意到有效点很少于是我们转向维护后缀加。因为是取 max 所以自然地维护差分,然后就是一个单点加,当差分值 \(<0\) 的时候这个点会和前面一个点合并,于是使用 map 维护,直接删除 / 加入点即可。时间复杂度 \(\mathcal O(n\log n)\)

  • 转网格图的时候最好把所有的限制,贡献之类信息也转入点进行统一刻画。
  • max, 区间加 和 (max, +) 卷积之类一般都是维护差分。
  • set, map 的使用和前缀和贡献形式的互相转化。

Day3 T1

瞎画一通发现直接做是个 tree dp,但是是 (max, +) 卷积,但是没法统计答案啊啊啊啊啊啊。

pb 大师的题解里说可以淀粉质统计答案,但我脑子不好想不出来呃啊。

此时做法上已经不存在突破点,那就自己猜出来点信息用用。这是猜结论的动机。

一个直观的猜想是,\(E_{k + 1}\) 的决策可以由 \(E_k\) 的决策拓展而来。因为树有着直径的优良性质,这样的猜想十分自然。怎么证明?我不会,网上只有 JOI 官方的证明,有中文证明踢我。

首先,\(E_1\to E_2\) 不满足,先把这俩求出来。

经典长剖贪心是啥啊???不是这咋就长剖了???

  • 合理运用信息。适当猜结论。
  • 树的直径性质。

Day 3 T2

一般地,对于这类问题,我们可以考虑操作转化或者发掘性质。看上去并不能操作转化,所以先找找性质。

哈哈,cnm 找不到。


没有 assign 只有 xor 的话是简单的,就是 \(s\oplus t\) 的极长 1 子段个数。

有 assign 的话,关键在于操作之间的转化,要注意到 assign 可以通过调整排在 xor 前面且效果不变,于是先 assign 再 xor 即可。

剩下的就是常规操作。两种 assign 操作必然无交(有交的情况转化为 xor),于是 \(dp(i,0/1/2)\) 表示 \(i\) 的三种状态,随便 \(\mathcal O(n)\) 做就行。

  • assign, xor 操作的转化。

Day 3 T3

被经验杀了 /ruo。

\(L_i\gets L_i - i, R_i\gets R_i - i - 1\),不受时间的干扰。每条路径的限制可以用分段函数刻画,然后这个分段函数可以复合一下,用一个三元组描述,在线段树上合并。

  • 对于限制特殊性的利用。视角转化。

Day4 T1

唉这不是我们 CCPC 2023 网络预选赛 L 的梗吗(但其实显然是 JOISC 先。。。而且这题更强)

\(C\) 升序排序,假设选的左右端点是 \(l, r\),那么答案就是 \(2(C_r - C_l) + V_r + V_l + V_{m-2\ max}\)。最后一个字符表示 \([l,r]\)\(V\) 的前 \(m-2\) 大和。

然后你发现这个形式和上面那道题太像了。。。决策单调性分治 + 主席树算一下就行。感性理解就是,两个决策 \(x,y(x < y)\) 对于 \(k\) 如果都满足要求,显然 \(y\) 更具潜力,因为 \(y\) 对应的 \(m-2\) 最大值变化一定较快。于是靠后的优秀决策容易留下。这类模型都具有这个性质。

  • 经典决策单调模型。最优性 + 决策包含导出结论。

Day4 T2

看完题想起了模拟赛的 “摩拉克斯”。

md,被诈骗了不想写了。

JOISC 2016

哈哈,刚刚看舰长线甜晕过去了,刚醒,大火聊了这么多啊。

Day1 T1

根据 dilworth 定理,最小链覆盖 = 最长反链,于是 r 不降时 h 不升。

扫描线,按 r 降序,a 降序分别排序,然后 BIT 维护前缀最大值就做完了。

  • 限制拆开处理。

Day1 T2

啊,一看感觉直接增量效率很低,而且我们有方法求出 “中间值”,那应该就是分治了。

随机取一个数,可以强行问出这个数的 p 值,然后左右两侧分治求解。期望 O(n) 带个 2 的常数,实际不好说。

Day1 T3

最构式的一集。

114514 年前的某场模拟赛考了这个题,今天才知道原题是这道。然而我一点关于做法的印象都没有了,令人感叹。只记得当时补题写了将近 3k 的 shaber 转移。不想写呜呜呜。(但是那天第一次去打了羽毛球,记忆犹新!)

Day2 T1

哎哎。怎么绘世呢。

显然可以在第一个位置统计,然后就变成了经典问题,一个 trivial 的解法是分块 + 主席树。

但是不想写这个 shaber ds 怎么办?关注这个特殊的询问形式,它非常简洁且好维护,于是考虑从贡献的角度入手,(a, b) 有贡献当且仅当 a < V <= b,于是离散化 + BIT 维护即可。

这样做有很大的局限性,因为但凡它询问的限制再复杂一点就不能这样做。。不过这也给了我们一个不错的启示,ds 问题也可以多从贡献角度入手(好像有点废话)。

哦对了这题里的 “高于” 实际上是 “不低于”。。。

  • 关注题中的特殊性质,即使它不一定是显式的,即使它可能是一种定性的判断,但这也能给我们很大的启发。

Day4 T1

看起来很神秘啊,于是我要发表一个论断:题越难,题越简单。

显然 -1 是不连通的情况,我们考虑联通的时候是个什么策略。

后面忘了。捏吗,格式太乱了压根不想整理这个 blog。。。还有几道题也懒得写。

鲜花

接下来是很想倾诉但又不太想公开的闲话,偷偷藏到最后。语文本来就不太好,而且这种闲话也不太想用太多修辞手法,所以就一切从简啦。

我察觉到了自己的一些改变。csp, noip 之前,我竭尽全力欺骗自己,我只想享受比赛享受 OI,一点也不害怕失败。可惜的是身体很诚实,考试当天不断的拉肚子,雪上加霜的高烧都验证了这点。

我骗自己,似乎我已经很努力了,还是没法达到期盼的结局,只能归结于天命使然。

其实我一直在逃避自己的内心,不愿意承认不如别人的事实,不愿意承认自己坐在电脑桌前只是在磨洋工的事实,不愿意直面注定的失败。

我不知道我是否真正做出了改变,但此时此刻我的心境确实已经和从前大不相同。至少,我已经拥有了坦然面对失败的勇气,以及从头再来的决心。

近一段时间我的情绪变得非常敏感,经常受到轻微的触动便会流泪。前天看到了 ABC 的 E 题,立马鉴定出原题,思绪飘回了遥远的初二,那次 zzyz 邀请赛中,这道题作为压轴,我想了很久很久才得出了现在看来显然的做法。通过那道题,我第一次听说了 “云浅知处” 这个名字,惊叹于 HA 还有这样的神仙,也是第一次见到 “珂朵莉” 这个几乎伴随我 OI 生涯的名字。不知不觉间开始流泪。

说回来,改变的契机可能是 WC 的晚会。我坐在电脑前观看着时而卡顿的直播,感受着现场的氛围。思绪一下变得缓和,我放下了平日时时挂在心头的对竞争的担忧,全身心地感受 OIer 之间的友好氛围。这正是我起初在校内测试垫底也要倔强地坚持下来的理由之一啊。

听到 dottle 远程演讲的末尾,我发现我也开始不由自主地落泪,会想起 NOI2023 dottle 机器人文章的结尾,我想,我大概真正地理解了那句话中蕴含的情感。初见这句话时我为我无法真正做到它而自责,不知不觉间它已经浸润了我的心灵。

最后是云浅的《蜂鸟》,唱的很好ww,但是这段线上直播中间卡了几次 /oh。再次听到这首歌仍然感觉充满力量和希望。

再看省选,我已经抛弃了所有的焦虑和紧张。几个月的 whk 生活呈现给我了另一种别样的生活方式,升学毕竟不止 OI 一条路,我也完全不害怕高三一年的全力冲刺。不必再为了功利的目标而过度纠结,这样反而会让我忽视 OI 中真正吸引我的美好。

我仍然潜心期盼着奇迹出现,但也终于发自内心地不希望任何一位同学离开。这毕竟还是一门竞赛,有人离开在所难免。而这正是 OI 圈子的魅力所在:一群志同道合的朋友在残酷的现实下编织出了一片名为 “OI” 的美好梦境。

似乎罕见的不魔怔一回。感觉实质上我仍然是一个内心脆弱的人,魔怔可能也只是为了掩饰自己的外壳。

我不是一个浪漫的人,但今天写了这么多,还是想用一句词来收束:

你的故事还久 / 现在刚刚好开头 / 愿你旅途自由

posted @ 2024-02-06 00:33  ImALAS  阅读(23)  评论(2编辑  收藏  举报