2025 年日祭

本文将同步发表于洛谷(暂无法访问)CSDNGithub 个人博客

本蒟自2025.2.8开始半停课。


以下是题目格式:


任务计划(站外题与专题)

(2025.2.8)

2025.1.4 新的一年

今日歌曲:New Year’s Day

去年停课的时候是有记日祭的,但是有一些是手写的,一直都还没有整理好。今天看到一个简单的trick,想记下来。于是,就又开始写日祭了。

  • [洛谷 P2831] [NOIP2016 提高组] 愤怒的小鸟

    一道远古状压题了。(一是指题目本身远古,二是指这道题是好久之前就该做的题。)看到第一篇题解的trick,想起去年暑假集训的时候也有这样一个trick,但是忘了是哪道题。这个trick挺简单的,但也挺好用:状压时,如果目标状态是全0或全1,并且转移顺序不影响结果,那么可以直接从最低位的1或0转移,因为最低位最终一定会被转移,而顺序又不影响结果,所以这样做可以优化掉 O ( n ) O(n) O(n) 的复杂度。其他的按正常状压即可。

  • [Atcoder ARC100E] Or Plus Max

    今天学了 SOSDP,挺神奇的一种 DP。这个题算是板子题吧。只用维护子集的最大值与次大值即可。

今天下午给初二机房的办了一场比赛,整体比较顺利。(所以没做什么题。)比赛链接:CWOI-N ER & NYR 1

今天感觉要掉橙了,但是Rated的比赛还要等一周。想着把之前那篇被打回的题解改了交了,但是晚上写给初二机房的的题解了,没空。看明天改吧。

2025.1.10 新的开始

今日歌曲:Castles Crumbling

今天考完期末,回来一看,天塌了,掉橙了。明天打一场比赛。

现在终于确定15班后续的各种事项了。又是一个新的开始

另外,我就莫名奇妙地进省选了(尽管是体验名额)。还有一个有趣的事实:

我没有提高组一等奖,然而我进了NOIP(体验名额);我没有NOIP一等奖,但我进了省选(体验名额)。

期待人生中的第一场SCOI(希望不要爆零)。

2025.1.12 言而无信

今日歌曲:Back To December (好吧其实是存货)

我果然是一个言而无信的人。踩一脚前天的日祭,昨天还是没打比赛。

今天%你赛,除了暴力的B和C,其它全挂了分。至于A,调试的时候把模数写掉了。被暴扣70分呜呜呜。

最终荣获 30 + 10 + 30 + 0 = 70 30 + 10 + 30 + 0 = 70 30+10+30+0=70分。

  • A - 括号序列

    题目:给一个由左右括号构成的字符串 s s s,对于每一个位置 i i i,输出有多少个子串,满足这个子串是一个合法的括号序列,并且 i i i 这个位置在子串中。

    题解:简单维护前缀与后缀的括号数量即可。(忘写该死的模数暴扣70pts。)

  • C - 矩阵删除

    题目:给一个 n × m n \times m n×m 的 01 矩阵,我们想在每一行删除一个元素,得到一个 n × ( m − 1 ) n \times (m - 1) n×(m1) 的矩阵。其中删除的元素的位置 ( i , a i ) ( 1 ≤ i ≤ n ) (i, a_i)(1 \le i \le n) (i,ai)(1in),满足 ∣ a i − a i + 1 ∣ ≤ k ( 1 ≤ i < n ) \vert a_{i} - a_{i + 1} \vert \le k(1 \le i \lt n) aiai+1k(1i<n)。请问最后能得到多少种不同的矩阵。两个矩阵如果删除的元素位置不同,但最后得到的结果相同,我们认为是相同的。由于答案很大,输出答案对 1 0 9 + 7 10^9+7 109+7 取模的值。

    题解:比较板的DP,但是赛时思路没那么清晰,也没去推式子。分别维护对于每一个位置的方案数以及与旁边位置重合的方案数,推出式子后发现全都是求和,于是用前缀和维护即可。

2025.1.13 乐极生悲

今日歌曲:Wonderland

今天期末考试考完了,整体还行,语文更是考到了惊人的 127.5 127.5 127.5,要知道我之前最高的一次也就 122 122 122 左右,而且还经常上不了 120 120 120,这次简直是超常发挥。听到成绩的时候直接喜极而泣了。

下午体育课,刚好初一体锻放歌,放得全是霉霉的歌,我还去点了几首。开心。

然而下课要集合的时候,我小跑了一下,而这下就恰好被足球爆头,眼镜镜架直接断掉,箍牙的铁丝直接断掉,嘴皮直接被铁钉磨得烂掉,鼻子被眼镜压了一个印子,还在流鼻血。

真是乐极生悲

2025.1.17 傻子游戏

今日歌曲:Foolish One

今天开始上课六天。

昨天听说 jmr 拿了清华一等约。祝贺他。

这周二(1.14)已经回到15班了。

昨天晚上玩梗发癫,还玩了离谱的傻子游戏。达成成就:在5.5h里睡够8h。

上午%你赛,T1忘了判零挂了10pts,T3是之前做过的一道原题,于是赛时死磕,最后没调出来。赛时的思路基本上是对的,但是没想到容斥;又因为我钦定的一个条件有问题,导致正确性略有问题,最后没调出来。

喜提 90 90 90 分。

  • A - 串

    题目:在虱子王国,一句话由 n n n 个词组成,其中恰好有 k k k 个词是怪的,其它的词都不是怪的。众所周知,负负得正,我们定义一句话的一个区间是怪的,当且仅当其中含有奇数个怪词。请构造一句符合条件的话,使得其中怪的区间数量最多。

    题解:发现答案为奇数块乘上偶数块。构造即可。

  • B - 艺术家

    题目:给定一个长度为 n 的颜色序列 c c c。再给出 m m m 个区间,第 i i i 个区间为 [ l i , r i ] [li, ri] [li,ri]保证任何两个区间都是不相交或包含的关系。在接下来的 q q q 个单位时间内,第 i i i 个时间会给定 x , y x, y x,y,表示将 c x c_x cx 变为 y y y。请对于每一个区间求出,最早的其中所有颜色都互不相同的时间。

    题解:

    保证任何两个区间都是不相交或包含的关系。

    所以可以把区间建成一棵树。当一个子区间合法,其父区间才有可能合法。在原数轴上维护 l s t i lst_i lsti 表示 i i i 之前第一个颜色与 i i i 相同的点,则一个区间内部颜色互不相同等价于 max ⁡ { l s t i , l ≤ i ≤ r } \max\{lst_i, l \le i \le r\} max{lsti,lir}。使用线段树维护。对于 l s t lst lst 的更新,用 set 维护。即可。(难写死了,还没写完。)

  • C - 黑白树 ([Atcoder ARC108F] Paint Tree

    题解:画一个直径上吊着节点的图,讨论一个节点在什么时候可以带来贡献。容斥计算即可。

晚上打了入门赛,可以加咕值了。

晚自习最后10分钟,记一些话。

我的信竞,在进步么?看起来好像是的。要是拿现在的我和一年前的我对比,那已足以 k k k 倍杀。但……补过的题还是不会做,码量大一点的又不愿意写,一到晚自习就写不动了,于是写一会儿又开始划水。我倒有一个优点,就是一般不会去刷水题(除了入门赛)。但是,难一些的题……绿题效率低,蓝题想不全于是又看题解,紫题几乎无法独立完成。

最终做了的题似乎是白做。

……

终究还是人的问题。

2025.1.18 正难则反

今日歌曲:Wildest Dream

这两天换了头像。

今天上午VP CodeForces Round 997 (Div. 2)

  • [CodeForces 2056A] Shape Perimeter

    计算重叠部分即可。

  • [CodeForces 2056B] Find the Permutation

    我们总是建从小节点到大节点的有向边,对这个DAG进行拓扑排序。因为我们有时并不想让一个小节点往大节点连边,所以用堆维护入度为零的点即可。(可恶,赛时多测不清空卡了我一发。)

  • [CodeForces 2056C] Palindromic Subsequences

    玄学的构造题。我们希望大概长这样的结构:

    1 ,   1 ,   1 ,   … ,   1 ⏟ a 个 1 ,   2 ,   3 ,   4 ,   … , a + 3 ,   1 ,   1 ,   1 ,   … ,   1 ⏟ a − 1 个 1 \underbrace{1,\ 1,\ 1,\ \dots,\ 1}_ {a个1},\ 2,\ 3,\ 4,\ \dots, a + 3,\ \underbrace{1,\ 1,\ 1,\ \dots,\ 1}_ {a - 1个1} a1 1, 1, 1, , 1, 2, 3, 4, ,a+3, a11 1, 1, 1, , 1

    这样构造出的答案有 a ( a + 2 ) + 1 = a 2 a(a + 2) + 1 = a^2 a(a+2)+1=a2 个,可以通过。稍微分讨一下即可。

    赛后看了一下题解,发现自己好唐:

    1 ,   2 ,   3 ,   … ,   n − 2 ,   1 ,   2 1,\ 2,\ 3,\ \dots,\ n-2, \ 1,\ 2 1, 2, 3, , n2, 1, 2

  • [CodeForces 2056D] Unique Median

    又是一道正难则反,计算坏的序列的个数。这道题的trick挺巧妙的,但没接触过,确实想不出来。发现长度为奇数的序列一定不是坏的,所以只考虑偶数长度序列。对于一个序列的中位数 x x x,将序列中 ≤ x \le x x 的数化为 − 1 -1 1,其它的化为 1 1 1。若最终区间和为 0 0 0,那么这个序列就是坏的。另外要注意去重。维护前缀和即可。

  • [CodeForces 2056E] Nested Segments

    组合数学。这个包含或不交的关系恰好和昨天的B差不多。我们想要尽可能多的节点数量,那么需要构造成二叉树。(这里具体不想证明。)对于某一个节点,设其儿子数量为 c n t u cnt_u cntu,则计算 ∏ C c n t u − 1 \prod C_{cnt_u - 1} Ccntu1(卡特兰数)即可。

下午先把E题改了,学习了一下吉司机线段树。这东西挺好理解的,写起来也很爽,但就是又臭又长又难调。

  • [洛谷 P10639] [BZOJ4695] 最佳女选手

    这道题本来是第二道模板题的,但因为第一题相当于第二题的子问题,所以直接冲着这道题来了。写板子即可。(啊啊啊终于还是讨厌上吉司机线段树了啊。)

今天整理了一些去年的日祭。还没把手写的整理上去。

2025.1.19 简直糖丸

今日歌曲:All You Have To Do Was Stay

今天上午%你赛,T1爆零了,简直糖丸。一共得了 60 60 60 分的分。

下午给初二讲题,讲得……简直糖丸

烦球,今天最后几乎啥都没干。

啊不是为什么T1爆炸啊。

2025.1.20 简直乐丸

今日歌曲:Daylight

昨晚又是在5.5h内睡满8h的一晚。

今天上午VP CodeForces Round 998 (Div. 3)。才做四道,糖丸了。

  • [CodeForces 2060E] Graph Composition

    赛时就很唐。并查集查联通并算连通块即可。

  • [CodeForces 2060F] Multiplicative Arrays

    一道很好的DP+组合数学题。赛时推式子感觉推出来了,结果赛后再一看伪了。很容易发现, ∑ i = 1 l e n [ a i ≠ 1 ] ≤ 16 \sum_{i=1}^{len}[a_i \neq 1] \le 16 i=1len[ai=1]16,所以DP计算非 1 1 1 元素的情况,再用组合数学即可。

  • [CodeForces 2060G] Bugged Sort

    这个题就挺有意思的。这篇题解感觉讲得比官方题解还要清晰。可以观察到,当 n ≥ 3 n \ge 3 n3,我们可以任意(正常)交换两组的位置。因此,我们可以将两组数进行翻转。换而言之,进行翻转的次数必须是偶数次。这里记翻转次数为 c n t cnt cnt。我们把较小的数放在 a a a,较大的放在 b b b。若按 a a a 排序后 b b b 有序,那么该组数据有解,当且仅当满足这三个条件之一:

    • 2 ∣ c n t 2 \mid cnt 2cnt
    • ∃ b i − 1 < a i ,   2 ∣ n ,   2 ∣ i \exists b_{i - 1} \lt a_i,\ 2 \mid n,\ 2 \mid i bi1<ai, 2n, 2i,此时可以选择交换奇数组数翻转以改变 c n t cnt cnt 的奇偶性,处于“无敌”状态。
    • 2 ∤ n 2 \nmid n 2n,此时可以翻转全部以改变 c n t cnt cnt 的奇偶性。

    否则无解。判断即可

今天下午看了一个2025年度第一个乐子原帖内部帖),简直乐丸

又一个新梗诞生了:

@chen_zhe 管理制度错了就要改,不能让无辜的人以泪洗面,如果管理制度还是这样的话,洛谷将会越来越腐败!!,我大不了就棕名,我要让洛谷知道瞎诬陷的严重性!

2025.1.21 反则难证

今日歌曲:deja vu

今天上午VP CodeForces Round 999 (Div. 1 + Div. 2),状态还好。

  • [CodeForces 2061C] Kevin and Puzzle

    有点思维的DP,题目挺好的。

  • [CodeForces 2061D] Kevin and Numbers

    又是一道正难则反。我们很难将 a a a 合并,那就把 b b b 中不合法的进行拆分。用 map 维护即可。其实这道题也好证 ,只是想凑一个小标题罢了

  • [CodeForces 2061E] Kevin and And

    这题有点……难评。为什么字典树过不了啊……

    因为 m m m 很小,所以对 b b b 进行状压,再将 a a a 的变化量压进堆里选最大的 k k k 个即可。(好吧其实不是特别理解。)

F 听不懂。

附一张梗图。

(这里声明一下,不是 jmr 讲得不好,而是实在听不懂。)

2025.1.22 比特塞特

今日歌曲:Maroon

年前最后一天了。

上午%你赛 100 + 10 + 60 + 0 = 170 ,   r a n k   4 100+10+60+0=170,\ rank\ 4 100+10+60+0=170, rank 4。T3没用 bitset 优化暴扣了 40 40 40 分。可恶。

2025.2.8 水讨论区

今日歌曲:Bigger Than The Whole Sky

今天洛谷讨论区关闭了。(以后不能水讨论区了。)

这个寒假,什么也没干。一看进度,已经和初二的差不多。但是他们第一遍拉得挺快,估计效果不大。

我如果现在回去,在那边又吃不饱。于是,就只有多肝一肝,把之前的进度补上来。

晚上打ABC392

  • [Atcoder ABC392E] Cables and Servers

    略考细节的题。先找连通块,之后再找每个连通块中的返祖边(即无用的边),再把连通块连通即可。

    (可是这题我赛时AC,后来突然想到一个hack。还没改,烦死了。)

  • [Atcoder ABC392F] Insert

    先写一个 O ( n 2 ) O(n ^ 2) O(n2) 的做法,发现可以分块。所以分块即可。(赛时想到分块但没写,烦死了。)

U p d   o n   2.12 \mathrm{Upd\ on\ 2.12} Upd on 2.12

前几天就把 E 改了,今天做了一下 F,写完交上去 TLE 了,也许是常数太大。又看了看题解,发现正解并不是分块,而是数据结构(我就说谁家分块开到 5 e 5 5e5 5e5)。最后还是放弃了。

2025.2.9 终于战胜

今日歌曲:Holyground

综合题1

  • [Gym 103466I] Space Station

    神奇搜索题,暴搜+剪枝+略微组合数学即可。

    神奇卡常题目,拼尽全力,2700ms+,终于冲进3s。

  • [Gym 101982D] Count The Bits

    很普通的一道DP题,可是赛时都在想组合数学。

    d p i , j dp_{i, j} dpi,j 表示到第 i i i 位模 k k k 的值为 j j j 的数中 1 1 1 的数量, c n t i , j cnt_{i, j} cnti,j 表示到第 i i i 位模 k k k 的值为 j j j 的数的数量,直接转移即可。

  • [Gym 102428F] Fabricating Sculptures

    神奇DP题。最开始看题解都没看懂,一是自己确实不理解是怎么算的,二是题解写得比较简略,看了好久才看懂。

    d p i , j dp_{i, j} dpi,j 表示从上往下一层层放,当前一共放了 i i i 个,最下面一层放了 j j j 个的方案数。有方程 d p i , j = ∑ k = 1 j d p i − j , k ∗ ( j + 1 − k ) dp_{i, j} = \sum_{k = 1}^j dp_{i - j, k} * (j + 1 - k) dpi,j=k=1jdpij,k(j+1k)(希望没写错)。将这个式子拆开再维护前缀和即可。(开了long long见祖宗。)

  • [Gym 104172F] Sum of Numbers

    很有趣的一道题。很容易发现,两个相邻字符串长度之差(的绝对值)为 0 0 0 1 1 1。暴搜即可。

    赛时的想法是,将原字符串平均分,再给 0 0 0 1 1 1 的偏移。可是偏移少了一些,虽然没 TLE 但一直 WA,拼尽全力无法战胜。

    赛后再改一改,拼尽全力终于战胜

今天本来说再补补昨天的 F,改改昨天的 E,结果今天的第三题看半天看不懂,昨天的 E 和 F 都没做。

最终今天做了四道题。

感觉心态有点崩。(尤其是看第三题的时候。)

……

2025.2.10 放弃即可

今日歌曲:Peace

综合题2

今天还做出了一道题。

  • [Gym 100861E] Extreme Programming

    看了题解真的好简单。首先我们先确定这些问题的顺序。推推式子,排序即可。现在,我们不用考虑顺序,只用直接背包,找出最大的 E V EV EV 与最小的 E T ET ET 即可。

    可是这道题不知道哪里写挂了,WA on test 15。放弃即可

  • [Gym 100217I] Sharing the Sweets

    分拆数板子题。(可是我不会。)写板子即可。

    分拆数 OI Wiki

  • [Gym 100202A] Little Brackets

    这题着实简单。设 d p i , j , 0 / 1 dp_{i, j, 0/1} dpi,j,0/1 表示放了 i i i 个括号,当前高度为 j j j,是否到过最高点(深度为 k k k)的方案数。直接转移即可。

    可是赛时想多了,一直在想组合数学。或许先设方程再推会好一些。

    赛时还因为多测不清空挂了四发。

今天还举办了 CWOI-N RER 1 > 2,感觉对于他们还是太难了。

(今天字符数破 1 e 4 1e4 1e4 了。)

2025.2.11 放弃即可

今日歌曲:Pink Pony Club

模拟赛 40 + 40 + 100 = 180 ,   r a n k   2 40 + 40 + 100 = 180,\ rank\ 2 40+40+100=180, rank 2

  • B - 刀言刀语 ([洛谷 P6864] [RC-03] 记忆

    今天给的题解以及同学讲解的都是非矩阵做法,可是听得迷迷糊糊。一下午尝试乱搞做法,结果没搞出来,最后,一道题都没改出来,放弃即可。晚上终于学习了矩阵,基本学懂了,这才发现矩阵有多好用。之后又看了这道题的矩阵+线段树做法,终于基本懂了。

    将这些数据打包成矩阵: [ a n s c n t 1 ] \begin{bmatrix} ans & cnt & 1 \end{bmatrix} [anscnt1]。对于操作一,等同于 [ a n s c n t 1 ] × [ 1 0 0 1 1 0 1 1 1 ] \begin{bmatrix} ans & cnt & 1 \end{bmatrix} \times \begin{bmatrix} 1 & 0 & 0 \newline 1 & 1 & 0 \newline 1 & 1 & 1 \end{bmatrix} [anscnt1]× 111011001 。对于操作二,等同于 [ a n s c n t 1 ] × [ 1 0 0 0 0 0 1 1 1 ] \begin{bmatrix} ans & cnt & 1 \end{bmatrix} \times \begin{bmatrix} 1 & 0 & 0 \newline 0 & 0 & 0 \newline 1 & 1 & 1 \end{bmatrix} [anscnt1]× 101001001 。对于操作三,若是恢复某个操作,则与操作一二相同;若是删除某个操作,则将这个操作设为单位矩阵( [ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 \newline 0 & 1 & 0 \newline 0 & 0 & 1 \end{bmatrix} 100010001 ),不会对答案产生影响。用线段树维护每个操作对应的矩阵,区间求和(求积)即可。

    这道题记得比较详细,毕竟是第一次接触矩阵。

  • C - 刀妙构造

    题目:给定一个长度为 n n n 的排列 a a a,通过尽可能少的操作,使得 ∀ a i = i \forall a_i = i ai=i。判断是否有解。若有解,输出具体的操作。操作的定义:选择 x , y x, y x,y 满足 1 ≤ x , y ≤ n , ∣ x − y ∣ = 1 , a x ≠ x , a y ≠ y 1 \le x, y \le n, \left | x - y \right | = 1, a_x \ne x, a_y \ne y 1x,yn,xy=1,ax=x,ay=y,交换 a x a_x ax a y a_y ay

    题解:原本就满足 a i = i a_i = i ai=i 的位置将原数组分割成若干个块。对于每个块,若是目标的一种排列则有解。设当前块为 [ l , r ] [l, r] [l,r],则依次把数 l ∼ r l \sim r lr 移到位置 l ∼ r l \sim r lr。要注意的是,在移动的过程中,可能会使得其它的 a i = i a_i = i ai=i 成立。所以我们将这些即将成立的位置先进行偏移,再将当前的数移到目标位置即可。

    扩展:尝试在 O ( n log ⁡ n ) O(n \log n) O(nlogn) 的时间复杂度内求出有解的排列个数,对 998244353 998244353 998244353 取模。

这几天强度还是比较高,因为跟进度跟得有点吃力了。今天晚上眼睛疼,难受。

2025.2.12 罚时吃饱

今日歌曲:two years

今天上午VP Codeforces Round 1004 (Div. 2),下午改Codeforces Round 1004 (Div. 1)。上午C题因为少判了一个条件,罚时吃饱了。

  • [Codeforces 2066A & 2067D] Object Identification

    神奇交互题。观察到一个性质:对象 A A A 的答案可能是 0 0 0,但对象 B B B 的答案不可能是 0 0 0

    x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,,xn 不是 1 ∼ n 1 \sim n 1n 的一个排列,一定可以找到一个不在 x x x 中的数 k k k,对其与另一个不同的数询问。若是对象 A A A,因为 k k k 没有向任何点连边,所以答案一定为 0 0 0。若答案不为 0 0 0,则是对象 B B B

    x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,,xn 1 ∼ n 1 \sim n 1n 的一个排列,那么找到满足 x i = 1 , x j = n x_i = 1, x_j = n xi=1,xj=n i , j i, j i,j。询问 ( i , j ) (i, j) (i,j) ( j , i ) (j, i) (j,i)。若是对象 B B B,那么两个答案应该是相等的,并且都 ≥ n − 1 \ge n - 1 n1(因为 ∣ x i − x j ∣ = n − 1 \left | x_i - x_j \right | = n - 1 xixj=n1)。然而如果是对象 A A A,那么当 n ≥ 3 n \ge 3 n3,不可能同时存在一条长度至少为 n − 1 n - 1 n1 i i i j j j 的路径与一条长度至少为 n − 1 n - 1 n1 j j j i i i 的路径(因为 2 ( n − 1 ) ≥ n 2(n - 1) \ge n 2(n1)n)。综上所述,若两个答案相等并且都 ≥ n − 1 \ge n - 1 n1,则是对象 B B B,否则是对象 A A A

    按照题解模拟即可。

  • [Codeforces 2066B & 2067E] White Magic

    这题似乎挺简单的,只是赛时看了一眼但是没多想。

    首先可以注意到,没有 0 0 0 的子序列一定是合法的,有两个及以上的 0 0 0 的子序列一定是非法的。所以要么选所有非零元素,要么选所有非零元素与一个 0 0 0

    若是选一个 0 0 0,显而易见,选最左侧的 0 0 0 是最优的。于是判断这么选是否合法即可。

  • [Codeforces 2066C & 2067F] Bitwise Slides

    很有意思的 DP 题。

    我们根据题意可以得出,对于时刻 i i i,记 s u m i = ⊕ j = 1 i a j sum_i = \oplus_{j = 1}^i a_j sumi=j=1iaj,有 P ⊕ Q ⊕ R = ⊕ j = 1 i a j P \oplus Q \oplus R = \oplus_{j = 1}^i a_j PQR=j=1iaj。于是对于某个时刻,有这三种状态: { s u m i , x , x } ,   { x , s u m i , x } ,   { x , x , s u m i } \{sum_i, x, x\},\ \{x, sum_i, x\},\ \{x, x, sum_i\} {sumi,x,x}, {x,sumi,x}, {x,x,sumi}。设 d p i , x dp_{i, x} dpi,x 表示这三种状态的情况数,经过推导(具体过程略),可以得出 d p i , s u m i − 1 = 3 × d p i − 1 , s u m i − 1 + 2 × d p i − 1 , s u m i dp_{i, sum_{i - 1}} = 3 \times dp_{i - 1, sum_{i - 1}} + 2 \times dp_{i - 1, sum_i} dpi,sumi1=3×dpi1,sumi1+2×dpi1,sumi。发现可以滚动。由于值域较大,用 map 维护 DP 即可。

  • [Codeforces 2066D1] Club of Young Aircraft Builders (easy version)

    有趣的组合数学题。

    因为下面的楼层并不会影响上面的楼层,所以从下往上考虑。对于某一个高度,丢飞机的次数最多为 c c c,假设它实际丢 k k k 个,则有 ( c k ) c \choose k (kc) 种情况。所以设 d p i , j dp_{i, j} dpi,j 表示到了第 i i i 层楼,已经丢了 j j j 个飞机的情况数。有转移方程 d p i , j = ∑ k = 0 c ( c k ) ⋅ d p i − 1 , j − k dp_{i, j} = \sum_{k = 0}^ c {c \choose k} \cdot dp_{i - 1, j - k} dpi,j=k=0c(kc)dpi1,jk

    答案为 d p n , m dp_{n, m} dpn,m。直接 DP 即可。

    扩展:求证答案为 ( n c − c m − c ) nc - c \choose m - c (mcncc)

今天晚上略水……没做题。但是今天一天综合下来……还将就吧。

2025.2.13 笑点解析

今日歌曲:evermore

今天 jmr 终于回来了。

今天学习了李超线段树。

  • [洛谷 P4097] 【模板】李超线段树 & [HEOI2013] Segment

    刚开始学李超线段树,觉得挺简单的。其实它跟吉司机线段树有点像,只是维护的东西要少一些,并且代码更好写。

    对于每个节点,考虑维护在它中点处的最高线段编号,那么用类似于吉司机线段树区间取 m a x \mathrm{max} max:若当前线段完全优于原有线段,那么直接替换;若当前线段完全劣于原有线段,那么直接舍弃;若当前线段与原有线段有交点,那么递归更新当前线段较大的那一段。对于查询,直接把路径上所有的线段取 m a x \mathrm{max} max 即可。时间复杂度 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n)

  • [洛谷 P4069] [SDOI2016] 游戏

    纯堆码量的题。首先这题一眼树链剖分,一眼李超线段树。这题算是很基础的树剖,只是套的是李超线段树。

    于是 LCA + 树剖 + 李超线段树 就算是码量炸弹了。也许树剖都这样,只是我没怎么写过。所以……先把模板题写了再说。

    • [洛谷 P3384] 【模板】重链剖分/树链剖分

      第一道真正意义上的树剖。之前倒是写过一个有点树剖思想的贪心(但那个好像是长链剖分)。

      一共交了四发,笑点解析:前三发线段树没 pushup。由于当时另外没找到问题,于是我严重怀疑是线段树的问题。然后用那个线段树,写了一个线段树的板子,一测挂了,才发现是没写 pushup,糖丸了。

      第一次写树剖,稍微参考了一下题解代码,但整体还是自己在写。树剖其实挺好理解的。

    写完模板题,该写这道题了。这道题从下午就开始写,一直调到晚上都没调出来,只有明天再补了。

今天 C C F \mathrm{CCF} CCF X X S s \mathrm{XXSs} XXSs b a n \mathrm{ban} ban 了。适度阻止竞赛低龄化是有道理的,没必要小学就开始竞赛,而且有些 H N O 3 \mathrm{HNO_3} HNO3 真的很没数值;但另一方面,以后的分数线会有所上升。

今天晚上 y i s h u 2 \mathrm{yishu2} yishu2 让我们帮他帮另一个人验初赛题。那题……一言难尽。

2025.2.14 绝世好题

今日歌曲:Red Wine Supernova

今天%你赛, o n l y   130   p t s \mathrm{only\ 130\ pts} only 130 pts

  • B - permutation ([Codeforces 1827B2] [加强版] Range Sorting (Hard Version)

    绝世好题之神秘计数(?)题。

    又是一道正难则反。容易发现,答案为:

    ∑ i = 1 n ( i − 1 ) ⋅ ( n − i + 1 ) − ∑ i , j , k 1 ≤ i ≤ j ≤ k ≤ n [ max ⁡ p = i j a p ≤ min ⁡ p = j + 1 k a p ] \sum_{i = 1}^n (i - 1) \cdot (n - i + 1) - \sum_{i, j, k}^{1 \le i \le j \le k \le n} [\max_{p = i}^j a_p \le \min_{p = j + 1}^k a_p] i=1n(i1)(ni+1)i,j,k1ijkn[p=imaxjapp=j+1minkap]

    考虑枚举 a x a_x ax 满足 a x = max ⁡ p = i j a p a_x = \max_{p = i}^j a_p ax=maxp=ijap,那么 a x ≤ min ⁡ p = j + 1 k a p a_x \le \min_{p = j + 1}^k a_p axminp=j+1kap。显而易见, a j + 1 a_{j + 1} aj+1 a x a_x ax 右侧第一个比它大的数,那么 i ∈ [ p + 1 , x ] , k ∈ [ j + 1 , q − 1 ] i \in [p + 1, x], k \in [j + 1, q - 1] i[p+1,x],k[j+1,q1],其中 p , q p, q p,q 满足 a p a_p ap a x a_x ax 左侧第一个比它大的数, a q a_q aq a j + 1 a_{j + 1} aj+1 右侧第一个比 a x a_x ax 小的数。维护即可。

    这题……题解给的用 set 维护,可惜常数太大,被 y i s h u 2 \mathrm{yishu2} yishu2 卡掉了。他又给了个链表的实现,不想看,于是自己开始研究。

    由于要求的值都是最近的最大/最小值,所以考虑使用单调栈维护。 j + 1 j + 1 j+1 p p p 都非常好求,可是如何求 q q q 是个问题。

    当时做这道题的时候自己没想出来,后来看原题题解区才懂。做法是,对于前文所提到的 i , j i, j i,j,维护 n n n 个集合 S i S_i Si,满足 ∀ i ∈ S j + 1 \forall i \in S_{j + 1} iSj+1。接下来倒序遍历 a a a,对于每个 i i i,顺序枚举 j ∈ S i j \in S_i jSi,将单调栈中 > a j \gt a_j >aj 的数弹出,栈顶元素即为 q q q。在将每个 j j j 操作完后,将 a i a_i ai 加入单调栈。正确性证明如下(部分摘自原题题解):

    ( x , j + 1 ) (x, j + 1) (x,j+1) 表示查询 j + 1 j + 1 j+1 右侧第一个比 a x a_x ax 小的数。( x , j x, j x,j 含义同上。)若这个询问弹出了 a l a_l al,那么 ( x ′ > x , j + 1 ) (x' \gt x, j + 1) (x>x,j+1) 的答案显然不为 l l l。现在需要证明 ( x ′ , ( j + 1 ) ′ < ( j + 1 ) ) (x', (j + 1)' < (j + 1)) (x,(j+1)<(j+1)) 的答案不为 l l l

    • ( j + 1 ) ′ < x (j + 1)' \lt x (j+1)<x,因为 a x < a l a_x \lt a_l ax<al,所以 x x x 可以作为答案,答案不可能是 l l l

    • ( j + 1 ) ′ = x (j + 1)' = x (j+1)=x,因为 a x ′ < a ( j + 1 ) ′ = a x < a l a_{x'} \lt a_{(j + 1)'} = a_x \lt a_l ax<a(j+1)=ax<al,所以答案不可能是 l l l

    • x < ( j + 1 ) ′ < ( j + 1 ) x \lt (j + 1)' \lt (j + 1) x<(j+1)<(j+1),那么 a ( j + 1 ) ′ < a x a_{(j + 1)'} \lt a_{x} a(j+1)<ax,否则 a x a_x ax 右侧第一个比它的的数不可能是 a j + 1 a_{j + 1} aj+1,所以 a x ′ < a ( j + 1 ) ′ < a x < a l a_{x'} \lt a_{(j + 1)'} \lt a_x \lt a_l ax<a(j+1)<ax<al,答案不可能是 l l l

    终于证完了。按上述步骤维护即可。

    这题本来就有一定的思维难度。如果用单调栈,这道题的思维难度就更高了。如果用有的数据结构(比如 set),倒是好想好写,可是 y i s h u 2 \mathrm{yishu2} yishu2 卡常。

因为今天一下午加晚上一直苦攻 T2,所以昨天的题还没来得及补。

今天写得很晚了,准确来说已经第二天凌晨了。今天就到这里。

2025.2.18 无处不在

今日歌曲:I Forgot You Existed

“我无处不在。”—— y i s h u 2 \mathrm{yishu2} yishu2

今天在改游戏那道题,最终决定重构!

2025.2.20 笑点解析

今日歌曲:The Archer

今天还是在改游戏,最后终于还是改出来了。笑点解析又来了。

  • d f s 1 dfs1 dfs1 里计算了 d f n dfn dfn

  • d i s dis dis 在线段树中的编号与实际编号混淆了。

  • 另外还有一些很糖的低级错误,比如右儿子写成 p < < 1   ∣   1 p << 1\ |\ 1 p<<1  1 之类的。

2025.2.22 显而易见

今日歌曲:wish you were gay

% 0 sin ⁡ \%0\sin %0sin

  • A - 怎么又是先增后减 ([Atcoder joisc2014_b] [JOI Day2 T2] たのしい家庭菜園

    论赛时代码只与正解相差两行,赛时是有多糖。

    显而易见,一个数要么放左边,要么放右边。若放左边,则需要交换当前数与左边逆序对的个数,右边同理。显而易见,取较小的一侧的答案。用数据结构维护即可。

2025.2.25 数组开小

今日歌曲:mirrorball

  • [Codeforces 241E] Flights

    神秘又简单的差分约束。显而易见,我们只关注在 1 1 1 n n n 路径上的点,并且 1 1 1 到路径上每个点的距离都是唯一的。那么有 1 ≤ d i s v − d i s u ≤ 2 1 \le dis_v - dis_u \le 2 1disvdisu2。差分约束即可。

    做的时候由于数组开小了,挂了若干发,也是糖丸了。

  • [洛谷 P1993] 小 K 的农场

    模板题。

2025.2.27 联合省选

今日歌曲:It’s Nice To Have A Friend

今天写了一点联合省选 2025 游记

  • [洛谷 P4926] 倍杀测量者

    模板题。

  • [洛谷 P2474] [SCOI2008] 天平

    不怎么板但码量极小的题。

    我们要求的是满足 x a + x b < x i + x j , x a + x b = x i + x j , x a + x b > x i + x j ( i ≠ j , i ≠ a , b , j ≠ a , b ) x_a + x_b \lt x_i + x_j, x_a + x_b = x_i + x_j, x_a + x_b \gt x_i + x_j (i \ne j, i \ne a, b, j \ne a, b) xa+xb<xi+xj,xa+xb=xi+xj,xa+xb>xi+xj(i=j,i=a,b,j=a,b) 的无序二元组 ( i , j ) (i, j) (i,j) 的个数。由于我们并不知道 x x x 中的具体数值,只知道部分大小关系,又发现我们可以把上述和式转化为差式,所以维护两个数的差的范围即可。

2025.3.1&2 正常说话

这两天参加省选。这里用正常的说话方式补充一些有关考试题目的内容。

  • [洛谷 P11830] [省选联考 2025] 幸运数字

    钦定中位数为 x x x,设可重集中小于 x x x 的数的个数为 l l l,等于的是 e e e,大于的是 r r r,那么有 l + e ≥ r , r + e > l l + e \ge r, r + e \gt l l+er,r+e>l,所以 l − e < r ≤ l + e l - e \lt r \le l + e le<rl+e。为了让 x x x 尽量成为中位数,那么考虑让 e e e 尽可能大,即能取 x x x 的都取 x x x。同时可以得到 l , r l, r l,r 的范围,便可判断。用差分维护即可。

  • [洛谷 P11833] [省选联考 2025] 推箱子

    先考虑打一个暴力,随后发现是区间覆盖(覆盖成 x + i x + i x+i,其中 x x x 是给定值, i i i 是下标。)与区间查询。线段树维护即可。(可是我不会告诉你我写的双 log ⁡ \log log 可能要挂分。)

2025.3.4 难度偏高

今日歌曲:The Lucky One

今天补了一下 USACO25JAN,铜组难度感觉偏高啊。

  • [洛谷 P11667] [USACO25JAN] Astral Superposition B

    思维题。先处理 B,这两颗星星一定一颗在当前位置,一颗在左上方对应的位置。接下来处理 G,如果当前位置能够由已有的星星移动而来,则忽略;否则当前位置需要一个星星。即可。

  • [洛谷 P11672] [USACO25JAN] Table Recovery S

    这题一直没改,今天终于改了。先统计出每个数出现了多少次,仅出现了一次的两个数中的一个便是第一个数。又由于第一个数所在的行/列中的每个数的出现次数是不重复的,于是就可以根据第一个数推出整个表格。比较两个答案中更小的一个输出即可。

2025.3.6 正难则反

今日歌曲:Naked In Manhattan

今天中午 C 老师请吃饭,回来就出省选成绩了。省选总分 232 232 232,折合 58.71 58.71 58.71 C W   J u n i o r   r k   3 \mathrm{CW\ Junior\ rk\ 3} CW Junior rk 3。(其实一共也就 6 6 6 个初中生。)

今天略水。

  • [洛谷 P11672] [USACO25JAN] Reachable Pairs G

    有趣的正难则反。对于 1 1 1 操作,相当于把当前点换成一个超级原点并不参与计数。所以考虑倒推,先建边(并查集合并)再加贡献。具体地,对于一条边 u → v ( u < v ) u \to v (u \lt v) uv(u<v),若:

    • s u = 1 , s v = 1 s_u = 1, s_v = 1 su=1,sv=1:由于两个点都是超级原点,直接合并 u , v u, v u,v 所在的块。

    • s u = 1 , s v = 0 s_u = 1, s_v = 0 su=1,sv=0:当枚举到 v v v 时合并 u , v u, v u,v 所在的块。

    • s u = 0 s_u = 0 su=0:当枚举到 u u u 时合并 u , v u, v u,v 所在的块。

    枚举到一个点再加入贡献即可。

2025.3.8 打表可得

今日歌曲:Starlight

% 0 sin ⁡ \%0\sin %0sin

  • A - 114514

    题目:定义函数 f ( x ) f(x) f(x),其中 x x x 是一个长度为 n n n 的序列。这个函数的值 y y y 满足:

    • y y y 的长度为 n n n

    • y y y 中的元素互不相同。

    • ∀ i ∈ [ 1 , n ] , x i ≤ y i \forall i \in [1, n], x_i \le y_i i[1,n],xiyi

    • y y y 是满足上述条件的序列中,字典序最小的。

    现给定 y y y,求有多少个序列 x x x 使得 f ( x ) = y f(x) = y f(x)=y

    题解:打表可得,每个位置可能的值是独立的,即对于任意一个位置 i i i a i a_i ai 的取值集合不会随其他值的改变而改变。设 v i s i vis_i visi 表示 i i i 是否出现过,那么对于 a i a_i ai 的取值范围就是 [ l , i ] [l, i] [l,i],其中 l l l 满足 ∀ k ∈ [ l , i ] , v i s k = 1 \forall k \in [l, i], vis_k = 1 k[l,i],visk=1 v i s l − 1 = 0 vis_{l - 1} = 0 visl1=0。并查集维护即可。

  • C - 深黯「军团」

    题目:给定 n , k , m o d n, k, mod n,k,mod 与一个长度为 n n n 排列 a a a。计算从 a a a 开始的接下来 k k k 个排列的逆序对个数之和。

    题解:神秘数位 DP。这题赛时还是想到了许多,但是考试时误认为 a a a 的较高位不会改变,所以挂成 20 20 20 分(数据好水)。

    赛时想到了通过求一个排列的逆序对来算排名,也想到了要求的就是排名在一个区间内的排列的逆序对数之和,还**通过打表**想到了全排列的逆序对个数的 DP,甚至还想到了类似于阶乘进制的东西,可是因为不会康托展开而没写出来。

    具体地,将 k k k 与排列 a a a 康托展开。由于康托展开的值的数位之和就是逆序对个数,所以答案为 ∑ i = a a + k c o u n t ( i ) \sum_{i = a}^{a + k} count(i) i=aa+kcount(i),其中 c o u n t ( i ) count(i) count(i) 表示 i i i 的数位之和。对于重复的部分,直接 DP 即可。

2025.3.11 观察样例

今日歌曲:Getaway Car

要改名了。今天 VP Codeforces Round 1008 (Div. 2),打得烂的一匹,最开始只做了 A 和 B,不过幸好在 2:28 把 E AC 了,不然今天晚上整个人都不好了。

  • [CodeForces 2077A & 2078C] Breach of Faith

    赛时一直在求 a 1 a_1 a1,然后就被卡死了。

    事实上,发现 a 2 a_2 a2 更好求一些。 a 2 = a 1 + a 2 n + 1 + a 3 − a 4 + a 5 − a 6 + ⋯ + a 2 n − 1 − a 2 n a_2 = a_1 + a_{2n + 1} + a_3 - a_4 + a_5 - a_6 + \dots + a_{2n - 1} - a_{2n} a2=a1+a2n+1+a3a4+a5a6++a2n1a2n。显而易见,把最大值作为 a 1 a_1 a1 即可不重复。排序即可。

  • [CodeForces 2077B & 2078E] Finding OR Sum

    神秘交互题。以下均讨论八位整数。观察样例发现,询问 0 0 0 似乎比较有用,可以直接得到 x + y = s u m x + y = sum x+y=sum。再根据直觉,考虑询问 01010101 01010101 01010101,将得到的答案 a n s ans ans 再减去 s u m sum sum 就可以得到 1 1 1 的贡献。为了不让每一位的贡献重叠,我们便想到空一个位置放一个 1 1 1。这样,我们就可以根据这些数位的贡献来算出这些数位的和(指 x , y x, y x,y 对应数位之和)。剩下未知的数位也便可以根据 s u m sum sum 与已知的数位求出。显而易见,求答案时我们并不在意当前数位具体的值,只在意数位和。所以对于 m m m 的每一位只用分讨 0 0 0 1 1 1 即可。

    这种题确实挺直觉的,个人觉得也比较靠运气。比如我 C 想了半天就是想不到,这题基本是看一眼就有点想法而且就对了,甚至还是一发入魂。

2025.3.15 嗨克数据

今日歌曲:This Is Why We Can’t Have Nice Things
\\%0\sin

  • D - 完美的答卷
    题目:给定长度为 n n n 的数组 a a a,设 f l , r = ( max ⁡ i = l r a i ) ⊕ ( min ⁡ i = l r a i ) f_{l, r} = (\max_{i = l}^r a_i) \oplus (\min_{i = l}^r a_i) fl,r=(maxi=lrai)(mini=lrai),求 max ⁡ 1 ≤ i ≤ j ≤ n f i , j \max_{1 \le i \le j \le n} f_{i, j} max1ijnfi,j
    题解:本题数据过水,以至于赛时对拍拍出了问题但是交到 OJ 上过了。赛时这题也想到了许多,可是逻辑并不清晰,最后还是看了题解并与 dpfs 讨论才想出了以下的解法。
    钦定 a i a_i ai 是一个区间的最大值, a j a_j aj 是这个区间的最小值,且 j < i j \lt i j<i。设 p r e i pre_i prei 表示 i i i 左侧第一个比 a i a_i ai 大的位置,则 j ∈ ( p r e i , i ) j \in (pre_i, i) j(prei,i),且 j j j [ 1 , i ] [1, i] [1,i] 的单调(递增)栈中,单调栈 + 01trie 维护即可。可是,上述两个集合的交集不一定从 1 1 1 开始,所以对于 trie 树中的一个节点 i i i,维护 m x i mx_i mxi 表示经过该点的数的下标的最大值,便可以解决。可是删除又成为了一个问题。考虑用 vector 暴力维护每个 m x i mx_i mxi 的历史值,理论上时间复杂度不变,只是常数巨大。
    改完之后,就开始造 hack 数据了。有效果但不多。

2025.3.18 极限 AC

今日歌曲:Paper Rings
今天 VP Codeforces Edu Round 176。由于准备 VP 时 CF 还在系统测试,所以并不算严格意义上的 VP。最后一共做了 4 道,而 D 是在 VP 1:54 时才 AC,此前还有 3 发罚时。也是极限 AC

  • [CodeForces 2075C] Two Colors
    先将 a a a 排序。发现对于某一种颜色,能够与其搭配的颜色都是连续的一段。所以前缀和并动态维护能够搭配的区间即可。注意略特判 a i = n a_i = n ai=n 的情况。
  • [CodeForces 2075D] Equalization
    注意到花费不能重复,所以考虑背包 DP。设 d p i , j dp_{i, j} dpi,j 表示将 x x x 右移 i i i 位、将 y y y 右移 j j j 位的最小代价,转移十分显然,即可 O ( log ⁡ 2 2 n ) O(\log_2^2 n) O(log22n) 无脑做。然而由于我赛时太有脑了,非要写 O ( log ⁡ 2 n ) O(\log_2 n) O(log2n),最后调了好久才过。下次再也不长脑子了。

2025.3.20 疑似双休

今日歌曲:I Hate It Here
后天不用上课,这周疑似可以双休了!
今天在补好题推荐。

  • [CodeForces 2078D] Scammy Game Ad
    很符合“时下流行”的题目了。
    考虑 DP,设 d p i , 0 / 1 dp_{i, 0/1} dpi,0/1 表示从第 i i i 个左/右门开始,到最后一个门的最大倍率。转移也是十分显然的。对于第 i i i 对门通过加法新产生的人数 x x x,将答案加上 x ⋅ max ⁡ ( d p i + 1 , 0 , d p i + 1 , 1 ) x \cdot \max(dp_{i + 1, 0}, dp_{i + 1, 1}) xmax(dpi+1,0,dpi+1,1) 即可。注意最初还有 2 2 2 个人。

2025.3.22 为什么没有正经的标题?

并不是双休,在家里 VP 模拟赛。

2025.3.25 为什么没有正经的标题?

打 USACO,菜得银组一道都不会。

2025.3.27 为什么还是没有正经的标题?

  • [CodeForces 2077C] Binary Subsequence Value Sum
    极其有趣的题目了。
    显而易见, F ( v , l , r ) = o n e ( v , l , r ) − z e r o ( v , l , r ) F(v, l, r) = one(v, l, r) - zero(v, l, r) F(v,l,r)=one(v,l,r)zero(v,l,r),所以一个字符串的权值 W ( v ) = ⌊ ( o n e ( v ) − z e r o ( v ) ) 2 4 ⌋ W(v) = \lfloor \frac{(one(v) - zero(v))^2}{4} \rfloor W(v)=4(one(v)zero(v))2。把 0 0 0 − 1 -1 1,那么 W ( v ) = ⌊ s u m 2 ( v ) 4 ⌋ = s u m 2 ( v ) − ( s u m ( v ) m o d    2 ) 4 W(v) = \lfloor \frac{sum^2(v)}{4} \rfloor = \frac{sum^2(v) - (sum(v) \mod 2)}{4} W(v)=4sum2(v)=4sum2(v)(sum(v)mod2)。继续将这个式子化简即可,这里不再赘述
  • [CodeForces 2082B] Floor or Ceil
    从二进制角度思考,向上取整等同于先加一再右移一位,向下取整则是直接向右移一位。所以,若一个向上取整操作后还有一个向下取整操作,那么这个向上取整操作相当于是无效的。又有在 n + m n + m n+m 次操作之后,最大值最多比最小值大一。所以对于最小值,先向上取整再向下取整即可,最大值反之。
  • [CodeForces 2081A] Math Division
    考虑多操作一次的期望。多操作一次,则代表在第 n n n 位上产生了进位,又因为 a n = 1 a_n = 1 an=1,所以前 n − 1 n - 1 n1 位产生了进位(第 n n n 位是最高位)。设 d p i dp_i dpi 表示前 i i i 位进位的期望,则:
    d p i = { 1 2 × d p i + 1 ,   a i = 0 1 2 × ( 1 − d p i + 1 ) + d p i + 1 ,   a i = 1 dp_i = \begin{cases}\frac{1}{2} \times dp_{i + 1},\ a_i = 0\newline\frac{1}{2} \times (1 - dp_{i + 1}) + dp_{i + 1},\ a_i = 1\end{cases} dpi={21×dpi+1, ai=021×(1dpi+1)+dpi+1, ai=1
    直接 DP 即可。

2025.4.1 愚人节

今日歌曲:Forever Winter
别问了。因为今天是愚人节
因为我的日祭之前断更了一段时间,今天终于补上了。
今天改不动题,于是在出题。

2025.4.6 水讨论区

讨论区居然真的回来了,又可以水讨论区了(。
今天 VP Codeforces Round 1015, Div. 1 + Div. 2,赛后结算时,发现机房网络得了 MVP。详见犇犇。
前四题都是沟槽构造,不再赘述。

  • [Atcoder ABC400F] Happy Birthday! 3
    考虑正难则反。问题转化为:

    一个环上有 n n n 个物品,颜色分别为 c o l i col_i coli,每次操作选择两个数 i , j i, j i,j 使得 ∀ k ∈ [ i , j ] , c o l k = c o l i ∨ c o l k = 0 \forall k \in [i, j], col_k = col_i \lor col_k = 0 k[i,j],colk=colicolk=0,对 [ i , j ] [i, j] [i,j] 进行“漂白”,即将颜色都设为 0 0 0。一次操作的代价为 j − i + 1 + x c o l i j - i + 1 + x_{col_i} ji+1+xcoli。求将整个环漂白的最小总代价。 先断环为链。设 d p i , j dp_{i, j} dpi,j 表示将 [ i , j ] [i, j] [i,j] 漂白的最小代价,那么显然有 d p i , j = min ⁡ k = i j − 1 d p i , k + d p k + 1 , j dp_{i, j} = \min_{k = i}^{j - 1} dp_{i, k} + dp_{k + 1, j} dpi,j=mink=ij1dpi,k+dpk+1,j
    f i , j f_{i, j} fi,j 表示使 [ i , j ] [i, j] [i,j] 能够漂白的最小代价,那么显然有 f i , j = min ⁡ k = 1 j − 1 f i , k + d p k + 1 , j f_{i, j} = \min_{k = 1}^{j - 1} f_{i, k} + dp_{k + 1, j} fi,j=mink=1j1fi,k+dpk+1,j。当 c o l i = c o l j col_i = col_j coli=colj 时,有 f i , j = min ⁡ ( f i , j , f i , j − 1 ) , d p i , j = min ⁡ ( d p i , j , f i , j + j − i + x c o l i ) f_{i, j} = \min (f_{i, j}, f_{i, j - 1}), dp_{i, j} = \min (dp_{i, j}, f_{i, j} + j - i + x_{col_i}) fi,j=min(fi,j,fi,j1),dpi,j=min(dpi,j,fi,j+ji+xcoli)
    答案即为 min ⁡ i = 1 n d p i , i + n − 1 \min_{i = 1}^n dp_{i, i + n - 1} mini=1ndpi,i+n1

  • [Codeforces 2086E] Zebra-like Numbers
    确简单的啊,可是自己就是想不到。
    考虑计算一个数的斑马值。贪心地,尽量选大的斑马数减即可。
    考虑记搜,设 d p i , j dp_{i, j} dpi,j 表示 [ 1 , i ] [1, i] [1,i] 中斑马值为 j j j 的数的个数。那么显然有 d p i , j = d p i − m x , j − 1 + d p m x − 1 , j dp_{i, j} = dp_{i - mx, j - 1} + dp_{mx - 1, j} dpi,j=dpimx,j1+dpmx1,j,其中 m x mx mx 是不大于 i i i 的最大的斑马数。具体地, d p i − m x , j − 1 dp_{i - mx, j - 1} dpimx,j1 表示 [ m x , i ] [mx, i] [mx,i] 中斑马值为 j j j 的数的个数, d p m x − 1 , j dp_{mx - 1, j} dpmx1,j 表示 1 , m x − 1 1, mx - 1 1,mx1 中斑马值为 j j j 的数的个数。

2025.4.8 过水了

今日歌曲:it’s time to go
过水了今天。

2025.4.10 证明略

今日歌曲:The Albatross

  • [Atcoder ARC196A] Adjacent Delete
    唐题啊,可是和我相比还是我更唐。
    假设 n n n 是偶数。如果我们忽略删除相邻数的条件,即可以任选两个数相减,那么答案应该是前 n 2 \frac{n}{2} 2n 大的数(记作“较大数”)的和减去前 n 2 \frac{n}{2} 2n 小的数(记作“较小数”)的和。
    容易发现,当我们只能选相邻数相减时,依然可以达到这个答案,因为在任意时刻,总存在至少一对较大数与较小数相邻。
    n n n 是奇数,那么一定有一个元素不被选,且这个元素一定在奇数位,这样才能把数组分成长度为偶数的两段。枚举不被选的位置,用对顶堆维护前后两段的答案即可。
  • [Atcoder パ研合宿2024 第3日 E] Roller Coaster
    人类智慧啊。选高度差最大的边即可。证明略。
  • [Atcoder パ研合宿2024 第3日 G] Bracket Sequence
    极一眼啊,大概十分钟切了吧。跟翻转括号序列的一个区间那题差不多,这题还简单一点。
    注意到位置 i i i 可由 i − 1 i - 1 i1 与跟 i i i 位置高度相同的位置转移而来。拿一个桶维护后者即可,遇到右括号时记得清零。

2025.4.12 写了跟写了一样

今日歌曲:august
模拟赛。

  • A - 倒水
    题目:有三个容量分别为 x , y , z x, y, z x,y,z 的杯子与一个容量为 n n n 的一个桶,每次可以:
    • 把一个杯子灌满; - 把一个杯子的水倒出去; - 把一个杯子的水倒到另一个杯子直到这个杯子空了或另一个杯子满了; - 把一个杯子的水倒到桶里。
      对于 [ 1 , N ] [1, N] [1,N] 中的每一个 n n n,求要使桶装满水,最少的操作次数。
      题解: y i s h u 2 \mathrm{yishu2} yishu2 发的题解写了跟写了一样
      容易发现,经过转化,可以得到两种操作:向桶里加 x / y / z x / y / z x/y/z 单位水与从桶里舀出 x / y / z x / y / z x/y/z 单位水回到对应的杯子(后者是操作一与操作三的结合),每次操作的代价都为二。注意到,对于某一个水杯,若我们用它进行的最后一个操作是操作二,那么代价为一,因为不用把舀出来的水倒出去。设 d p i , j dp_{i, j} dpi,j 表示桶里有 i i i 单位水的最小代价, j j j 表示三个水杯是否最后用于操作二,那么先正着 DP 一遍,即全部使用操作一,再反着 DP 即可。统计答案时应统计 d p i , j − p o p c o u n t ( j ) dp_{i, j} - popcount(j) dpi,jpopcount(j)
  • B - 让他们连通 ([Codeforces 1706E] Qpwoeirut and Vertices
    居然能场切 2300 2300 2300
    要让区间 [ l , r ] [l, r] [l,r] 联通,等价于 ∀ i ∈ [ l , r ) \forall i \in [l, r) i[l,r) i i i i + 1 i + 1 i+1 联通。设 t i m e i time_i timei 表示 i i i i + 1 i + 1 i+1 联通的时间,则答案为 max ⁡ i = l r − 1 t i m e i \max_{i = l}^{r - 1} time_i maxi=lr1timei,可以用 ST 表维护,常数又小又好写。
    对于 t i m e i time_i timei,考虑启发式合并。在合并时,枚举较小的集合的元素,并判断它是否与另一个集合中的元素相邻即可。赛时因为没判 f a x = f a y fa_x = fa_y fax=fay 被硬控了半个小时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GetawayCar1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值