训练纪要伍
训练纪要肆摆了,因为前几天状态有点过于不好了。
一眨眼 CSP 过去两周了啊,到 NOIP 就剩三周了。这两周前几天状态就一般,后面先是眼睛疼后是脑袋疼然后又感冒了?今天下午还觉得感冒很难受,体活出去吹了吹风打了打羽毛球反而好点了。
这三周加把劲吧,打完 CSP 算了算感觉形式不容乐观,感觉甚至要求我在正赛中超常发挥?不重要了,做好每一步。
想了想打算从这一刻重新开始写日记,还是不设密码了(感觉没什么大问题),这样可能看的人多点。大家每天多来看,就当是监督我。
我总会跟人说“这一段生活没盼头”,想表达的意思是从现在开始后面的很长一段时间生活都没有变数,我总在盼比赛盼外训盼放假盼各种能够使自己的生活丰富起来的事情。但是那天我在床上想,我小时候好像也很能接受日复一日的时光,现在却变得非常浮躁,忽视了每个平凡的日子。或许在这样的日子里用心感受每一秒钟的时光才是生活的常态,塌下心来,塌下心来。
加油吧,感觉时间没多少了,但是还有很长的一段路。
题是按通过顺序写的。
11.9 Sat.
好像之前 ARC 下了 1DAN 又摆了一场 ABC 导致 Rating 只有 1902?于是决定打 ABC。
我不懂我当时在想什么,反正最后 G 没写完,鉴定为学学考学魔怔了,不仅用的不熟而且直接算复杂度也是错的啊,但是我莫名其妙就开始写了,不懂。
最后还下分了,好好打 ABC 还下分?
11.10 Sun.
早上体活难得的起床去打羽毛球了,我去,打完以后精神抖擞重获新生药到病除啊。
改昨天 T4,写之前和写完后都感觉没多难写,结果直接写到下午三点半才过,意识到了一个深刻的矛盾就是之前写快写的方式会无法输出零,有点唐了。
然后本来想随便看一眼基础赛,结果 T4 不会?看了一会还是不会,然后发现读错题了,不过后来想了想读错的版本也是一样的做,有点唐了。
后来去改前天 T4 99pts,\(O(n^3)\) 卡过 \(10^3\),好诶!
晚上和 DZ 一起开了道交互 CF1856D。
QOJ#8951 澡堂
11.9 NFLS模拟赛 T4/CTT2022 D3T1
这个其实也挺厉害的,但是补题解的时候已经过去很久了,所以大概记一下思路。
直接按 \(\bmod m\) 分组,然后每个人洗澡的时间形如 \(s_i=\max\limits_{j=1}^i t_j+(i-j)T\),答案就是 \(\sum\limits_{i=1}^n (\max\limits_{j=1}^i t_j-jT) - (t_i-iT)\),相当于要求所有前缀 \(\max\)。
修改只有一个位置,还是独立的,所以大概可以拆成三块分别算,倍增可以优化加速,需要分讨分讨。
NFLS#P10303 命运歧途
11.8 NFLS模拟赛 T4
题解设的状态的确比我赛时好得多,我赛时大概很难拓展到任意 \(k\)。
设 \(f_{i,j,0/1}\) 表示前 \(i\) 个数直到现在有 \(j\) 对数是相邻的,其中 \(i\) 和 \(i-1\) 是否相邻,直接转移,单次 \(O(n^2)\) 的。
然后按 \(\bmod k\) 分组,每个同余类之间是不影响的,所以逐个转移即可。加 Barrett 越减可以卡过 99pts。
11.11 Mon.
模拟赛 \(65+90+50+5\),打的有点烂。T1 想了四十多分钟不会;又想了四十多分钟 T4 也不会,赛后发现是原题?T2 想了想会了,后来发现细节巨大多,写了两小时有 90pts;半小时写了 T3 50pts DP;剩下十五分钟补了 T1 80pts,判包有点毛病挂了点;十五分钟写了 T4 15pts 线段树,写挂了。
下午重看了一遍 T4,然后把 T1 改了,然后研究半天 T3,感谢 5k 倾情讲解!
晚上看了看 T3 类似的题,感觉不同的做法对于这两个题难度是不一样的。又和 DZ 开了一道交互 CF1153E,DZ 交互好强。
感觉一天很忙怎么才写了仨题,其中还有一道是水题?
NFLS#P12394 很有味道的题目
11.11 NFLS模拟赛 T1
做法一车,赛时想了一堆,都觉得不对,结果场切不了 T1……
设 \(f_{i,j}\) 表示考虑了前 \(i\) 个数,选出来的序列长度为 \(j\) 时,最后一个数最小是多少,直接滚掉第一维。有转移 \(f_{j+1}\gets \min(f_{j+1},a_i) (a_i>f_jb_j)\)。
容易发现任意时刻 \(f\) 是单调递增的,当 \(f_{j+1}<a_i\) 时没必要更新,当 \(f_j\geq a_i\) 时无法更新。于是最多只有一个位置需要更新,二分出来即可,复杂度 \(O(n\log n)\)。
NFLS#P12393 不朽之蜍
11.11 NFLS模拟赛 T3
做完以后发现是不是的确有点平凡?
考虑 Min-Max 容斥,有 \(E_{\max}(x)=\sum\limits_{i=1}^x {n\choose i} (-1)^{i-1} E_{\min}(x)\),其中 \(x\) 表示牌数。
考虑求出 \(E_{\min}(x)\),设第一次抽到这 \(x\) 张牌或 \(m\) 张特殊牌的期望次数为 \(f(x)\)。因为若因抽到 \(m\) 张特殊牌停止则需要重新做,那么:
继续求出 \(f(x)\),\(f(x)=1+\sum\limits_{i=1}^{n-x} \dfrac{(n-x)^{\underline i}}{(n+m)^{\underline i}}\),其中枚举的 \(i\) 是第几次抽牌,求和的是第 \(i\) 次抽牌时还没有抽到的期望。
对组合数进行推导,有式子:
代入可得 \(f(x)=1+\dfrac{\sum\limits_{i=1}^{n-x} {n+m-i\choose m+x}}{n+m\choose n-x}\)。
UPD:好像没必要在这步代入的。
求和后面变成什么列求和,即:
于是 \(f(x)=1+\dfrac{n+m\choose m+x+1}{n+m\choose n-x} = 1+\dfrac{n-x}{m+x+1} = \dfrac{n+m+1}{m+x+1}\)。
CF1392H ZS Shuffles Cards
不写了。
11.12 Tues.
模拟赛 \(100+100+40+10\)。开 T1 发现是搜索签到,懒得写先放了;T2 想加写不到一个小时;开 T3 发现一眼会 \(O(n^2)\),想了快一个小时还是只会 \(O(n^2)\),先放了;T4 想了个不见得有道理的反悔贪心,但是直接写了,一个小时左右过了所有大样例,最后只有 10pts;半个小时补了 T3 40pts \(O(n^2)\),又半个小时写了 T1,最后半个小时摆了。
下午体育课下去转了转,回来改了 T3,感觉非常牛啊!
发生了一些事情,但是还没发生完所以发生完再说。只能说好想一直在家里训练。
晚上选择先补博客,明天上午改 T4。
洛谷P6742 Portals
(双倍经验 洛谷P4442 Portal)
11.12 NFLS模拟赛 T1/BalticOI2014 D2T2/COCI2017 #3T4
发射是发射到四个方向距离当前点最近的墙之前,然后跑到距离当前点最近的墙前,朝这个墙发射一下,然后传过去。
预处理出来上述两个东西,然后跑最短路,\(O(nm\log nm)\)。
HDU#6883 Coin Game
11.12 NFLS模拟赛 T2/杭电多校2020 R10-G
将一堆硬币拆成两部分,一部分贡献是 \(a_i\),代价是 \(1\);另一部分贡献是 \(a_i+b_i\),代价是 \(2\)。这样可以表示出选 \(0\sim 3\) 个硬币的所有四种情况。
然后直接分别桶排序,算是小的反悔贪心吧,选一个代价为 \(2\) 的物品出来时放一个代价为 \(1\) 的物品回去。不需要堆,复杂度是 \(O(n+V)\)。
SPOJ#MUZIDA Muzidabutur
11.12 NFLS模拟赛 T3
设 \(m\) 是字符集大小,因为 \(|\Sigma|\) 不好看。用方括号表示矩阵元素是因为写下标有点挤。
这题感觉挺牛的,赛时想到可能可以矩乘维护,但是没见过这个 trick 导致以为至少要乘一个 \(m^3\log n\),就不理了。
首先有 DP 设 \(f_{i,j}\) 表示前 \(i\) 个字符,以字符 \(j\) 结尾的本质不同子序列数,有转移:
可以写成矩乘的形式,即每次右乘上一个大小为 \((m+1)\times(m+1)\) 的矩阵 \(F_p\),其中第 \(0\) 行/列表示常数项,剩下的对应着字符集中每个字符。直接用线段树维护能做到 \(O((n+q)m^3\log n)\)。
可以考虑通过前缀和差分来优化,即求出每个矩阵 \(F_p\) 的逆矩阵 \(G_p\),区间 \([l,r]\) 内 \(F_p\) 的乘积就等于 \(G_{l-1}G_{l-2}\cdots G_2G_1F_1F_2\cdots F_{r-1}F_r\)。
所以预处理出 \(F\) 的前缀积和 \(G\) 的前缀积,其中一个是右乘一个是左乘。时间复杂度 \(O((n+q)m^3)\)。
考虑从矩阵入手继续优化。
记 \(F,G\) 的前缀积分别是 \(A,B\),要求的答案是:
也就是我们实际上只是要求 \(A_p\) 的每一行的和与 \(B_p\) 的第 \(0\) 行的所有值。
可以手玩一下,模拟形如 \(C[i][k]\gets A[i][j]\times B[j][k]\) 的矩阵乘法。可以发现一个矩阵 \(C\) 右乘上一个 \(F_p\) 是 \(\forall i,C[i][s_p]\gets \sum\limits_{j=0}^m C[i][j]\),一个矩阵左乘上一个 \(G_p\) 是 \(\forall i,j(i\not=s_p),C[i][j]\gets C[i][j]-C[s_p][j]\)。
于是随便维护一下,预处理时只记录下需要的东西,可以做到 \(O((n+q)m)\)。
11.13 Wed.
早上来了继续补博客,写的太慢了。感觉不能按难度来决定写的是否详略,应该按重要程度,不过截至目前还是等价的。
上午改昨天 T4,中间穿插信息学考。
下午大概听了三个小时专题。回来把昨天 T4 调完了。打算练练 Min-Max 容斥。
但是晚上觉得博客补完心踏实一点,补完就去找 CTH 讲东西了。
洛谷P10001 优惠购物
11.12 NFLS模拟赛 T4/集训队互测2023 R1T1
挺好的题,但是写的略一点。设 \(x_i\) 表示 \(i\) 时刻用的优惠券数,\(s_i\) 表示 \(i\) 时刻结束后拥有的优惠券数。
大概就是贪心的思路,先将 \(a_i\) 每 \(c\) 个分成一组。如果使用优惠券来抵扣不超过 \(a_i\bmod c\) 个,就不会影响这一轮获得优惠券数,直接先贪心这一部分。
然后接下来你如果用优惠券折扣 \(c\) 个,会使后面额外少一个优惠券,你用不到 \(c\) 个,也会使后面额外少一个优惠券。所以先贪心的每 \(c\) 个优惠券一用,从后往前贪心(因为先在后面用比较优)。
最后就是不足 \(c\) 个,每次不断贪心取尽可能多的。
每个点可以用的优惠券数是 \(\min(c-1,b_i-x_i,s_{i-1}-x_i,\min\limits_{j\in[i+1,n+1]} s_{j-1}-x_j-1)\)。前两项是定值,后两项在任何时候都是随 \(i\) 单调递增的。于是按前两项排序,开一个优先队列维护下标,然后再开个线段树维护后两项。
洛谷P3175 按位或
HAOI2015 T4
不愧是板子题,直接 \(Min-Max\) 容斥改成求 \(E_{\min}(S)\)。
然后 \(E_{\min}(S) = 1 + E_{\min}\sum\limits_{T\subseteq U-S} p_T\),只有一个高维前缀和的事。
11.14 Thur.
既然放了专题还是要做的,但是感觉自己不是很喜欢非传统题。
随机开了三道做完了,后来看了看猜词感觉挺有意思的,然后开了道 Min-Max 容斥做了一半。
下午来了开梦熊模拟赛 T4,怎么就不算构造呢?结果不会,发现是从未耳闻的双调排序。
然后开洛谷公开赛,前俩题水的要死,继续看 T3,怎么就不算构造呢?结果不会,榜上过了一堆有点急就摆了。T4 感觉也是究极困难东西,但是有人 15min 过?要下分了要下分了。
我去,我是不是真的该加训构造?
然后去找 xrlong 深刻理解了双调排序。赛后把 T3 改了。后来发现每天很难把效率拉满。
感觉进步缓慢,训的时间越久跟别人差距越大,能不能明天 NOIP 后两天省选紧接着 NOI 打完睡觉啊。
洛谷P6982 Jump
NEERC2015-J
考虑先求出一个 \(k=\dfrac{n}{2}\) 的串,然后就能确定每一对数是否相同,然后再正反询问两次,大概是 \(O(2n)\) 级别的。
但是实际上随机一个串使得 \(k=\dfrac{n}{2}\) 的概率并不是很小,所以不断随机,然后做完了。
CF1592D Hemose in ICPC ?
答案肯定可以是一条树边,所以每次询问一个连通块,在 dfs 序上二分即可。
CF1667C Half Queen Cover
做不出来,但是可能比较套路。
考虑答案下界,发现下界能取到。
MX#第八交响曲
11.14 梦熊模拟赛 T4
双调排序板子?大概 useless,可以去看 xrlong 博客。
洛谷P11277 世界沉睡童话
觉得挺好的。
\(k=0\) 时构造 \(n\sim 2n-1\),\(k=\dfrac{n(n-1)}{2}\) 时构造 \(n\) 个相同的数。
发现一堆相同的数的贡献一定是 \(\dfrac{x(x+1)}{2}\) 的形式,所以不太够,考虑设 \(c\) 是满足 \(\dfrac{c(c-1)}{2}\leq k\) 的最大的 \(c\),\(r=k-\dfrac{c(c-1)}{2}\),一定有 \(r<c\)。
所以取出来三个数 \(p,2p,3p\),使得 \(p\) 出现 \(r\) 个,\(2p\) 出现 \(c-r\) 个,这一部分贡献是 \(\dfrac{c(c-1)}{2}\) 的,然后 \(3p\) 出现 \(1\) 个,可以加 \(r\) 的贡献。
剩下的部分填一些互质的数,选 \(n\sim 2n-1\) 中不是 \(p\) 倍数的数即可。为了减小影响使 \(4p>2n-1\) 就全对了。
11.15 Fri.
昨晚得知周六放假,但是这种假太短了,而且这样 NOIP 之后反而不放了。
上午模拟赛,T1 签了;T2 花了很长时间;然后发现 T4 是 NJUSC 原题,那一定是不会的,但是 T3 感觉也见过,甚至感觉改了,也不说想直接抄,就是想找找到底在哪里见的,翻了半天翻不到。思考了一会有点急,然后就摆了,开始板刷自己之前日记。后来从 5k 那里得知 T3 也是 NJUSC,那我记得我当时可能会了大概,但是现在还是不会,更能摆了。
下午发现 T2 写的是假的:)。快放假了于是开始摆了。
Codefestival2016_qualA_d Grid and Integers
11.15NFLS模拟赛 T1/codefestival2016 qualA-D
手玩一下发现限制是每两列的差值在每一行中都得一样。所以建一个图出来,dfs 一遍。
同时还要求每一个点非负,这个对每个连通块随便做一做就行了。
CF883D Packmen Strike Back
11.15NFLS模拟赛 T2
先二分,Check
函数里是 DP。状态设计好像比较别出心裁反正我没想到,转移好像也有点奇怪。
但是我懒得写题解了。
11.16 Sat.
上午模拟赛摆了。
下午放假回家。
超市里没看价格就买了齁贵的榴莲,有点心疼。但是晚上发现坏了于是就退了。
NFLS#P10158 医生厨
11.16 NFLS模拟赛 T1
先排序,当 \(x<a_n\) 时供给给 \(n\) 地区 \(x\) 个,使 \(x\gets 2x\)。当 \(x\geq a_n\) 时然后不断的从大到小使所有地区清零。
但是这样不太对,因为如果在某个时刻 \(\dfrac{a_n}{2}<x<a_n\) 时,做完这次操作 \(a_n\) 不会恢复满,那么下次清空 \(n\) 地区后就不一定能接着清空 \(n-1\)。所以每次使 \(x\gets 2\max(\lceil\dfrac{a_n}{2}\rceil,x)\),这样唯一一个问题是当 \(a_n\) 是奇数,会出现 \(x=a_n+1,a_n'=a_n-1\) 的情况,若 \(a_{n-1}\neq a_n\) 就没有关系,否则我们可以先清空 \(n-1\) 地区,再清空 \(n\) 地区,同样不会对答案有影响。
这只是一组可行解,事实上我们上面在 \(x\geq a_n\) 之前都是“额外操作”,当某个时刻有 \(\dfrac{x}{2}<a_i\leq x\) 时,我们先清空 \(i\),会使 \(x\) 变大,同时之后就不用清空 \(i\) 了,所以先贪心的做这种转移,不存在 \(i\) 时再做上述的“额外操作”。
事实上在写的时候每次额外操作直接将 \(x\gets 2x\) 也是一样的,但是分析时并不是这样。
11.17 Sun.
两点进的校,稍微有点困。
好像又剩下一堆博客和题没补了,准备咕咕咕。
但是又摆了半天!
晚上 ARC \(0\) 题跑路见过没?讨厌 AT。
11.18 Mon.
上午模拟赛 \(0+100+25+8\)。先睡了一个多小时?看了一遍感觉前仨题都不会,T4 又写起来很费时间于是不想写。想了一个小时 T1 发现做不出来,暴力都不会写。然后过了半个小时开始硬上 SAM 打 T2 暴力,结果发现暴力想错了,然后就发现会正解了,然后写了一会就只剩半个小时左右了。T4 全输出了 0,T3 打了暴力就结束了。
后来发现 T4 没多难写。
放假前后摆了三天导致题没怎么改呢,决定先不改今天 T3 了。
为什么不会把训练纪要写简略?以后要将一道题的博客时间控制在 10min 之内,好题另当别论。
晚上鼓捣了一会打 NFLSPC 的事,挑战 NPC!
CF461E Appleman and a Game
11.18 NFLS模拟赛 T2
不过赛后发现数组少开了 \(1\)。
反正我是直接硬上了一个 SAM,然后设 \(f_{i,j}\) 表示填第 \(i\) 个字符对应节点 \(j\) 时的最大答案。从节点 \(p\) 转移时若 \(t_{p,c}\) 存在则向 \(t_{p,c}\) 转移,否则向 \(t_{0,c}\) 转移。
实质上是不断地选出一些路径,使得每一段路径都无法在 SAM 上匹配。预处理一下每对字符 \((i,j)\) 之间最少要几条边才能使得这条路径无法匹配,就是在 \(t_{0,i}\) 开始沿 SAM 转移边跑 BFS,没有字符 \(j\) 转移边的点中最小的深度。
于是倍增求答案,做广义矩阵乘法,当当前矩阵中有值 \(<n\) 时是合法的,最后答案要 \(+1\)。
洛谷P9195 JOIRIS
11.18 NFLS模拟赛 T1/JOI Open 2016 T1
还挺厉害的,但是放 T1 你有什么心事吗?这场真不是 T2\(<\)T4\(<\)T1\(<\)T3?
先在模 \(k\) 意义下考虑,枚举第一个位置做几次 2 操作,之后后面每个位置应当做几次 2 操作以及是否合法都知道了。
然后考虑做这些 2 操作时可能中间会有空,所以在做一个在 \(i\) 位置的 2 操作之前把 \(1\sim i-1\) 和 \(i+k\sim n\) 的位置不断做 1 操作使得它们的值都大于 \([i,i+k-1]\) 中的最大值,这样做完这次 \(i\) 位置的 2 操作时那一行就已经被消掉了,就不会产生空。最后做一些 1 操作把所有位置补齐即可。
NFLS#P17089 拉密
11.18 NFLS模拟赛 T4
直接枚举每种点数选出三个或四个,再枚举长度为三,四,五的顺子,长度大于等于六的不用枚举,因为可以被拼起来。这两种情况加起来也不会很多,于是可以处理出每种拥有牌的方案是否合法。
然后再从 \(2^n-1\) 到 \(1\) DP 出 \(f_i\) 表示初始手牌为 \(i\) 时的期望答案,做完了。
ARC187A Add and Swap
确实是真不会。感谢 PC 讲解。
Corner Case 是 \(n=2\),单独判一下。
单调不降相当于差分数组非负,对 \(i\) 进行“两次操作”会使得差分数组 \(d_i\gets d_i+k,d_{i+2}\gets d_{i+2}-k\),从前扫到后可以使得 \(\forall i\in[1,n-1],d_i\geq 0\)。
这时 \(d_n\) 可能为负,对 \(n-1\) 做一次操作可以使得 \(d_{n-1}\gets d_{n-1}+d_{n}+k,d_n\gets -d_{n}-k\),所以在此之前可以先对 \(n-2\) 做“两次操作”使得 \(-d_n\geq k\)。
然后此时 \(d_{n-1}\) 可能又为负了,再不断地做“两次操作”使 \(d_{n-1}\) 非负即可。
11.19 Tues.
早上来了无视早读改了道题,早上时间好宝贵。
上午模拟赛只会 T1,然后 T2 打了人口普查分,T3T4 是略有优化的指数级暴力,结果 \(100+35+38+50\) RK14?
强烈谴责 T2 题解不写细节,控我半天。生气了就直接去看 T4,然后糊里糊涂啥也没干一天就过去了。
CSP 果真只有 RK9,明年真能进队吗?
NFLS#P5107 数据结构
11.16 NFLS模拟赛 T2
可以先求出每个点在全局中的优先级,添加就是添加子树中优先级最小的点,删除就是删其祖先中深度最小的已被添加的点,用线段树维护。
NFLS#10306 正在生产三叶虫
11.19 NFLS模拟赛 T1
默认每一项值都应当是 \(n\);当第 \(i\) 项为 \(n-1\) 时,会使得模 \(n\) 为 \(i\) 的同余类中每一项都 \(-1\);当第 \(i\) 项为 \(n+1\) 时,会使得模 \(n+1\) 为 \(i\) 的同余类中每一项都 \(+1\);当一个 \(+1\) 与 \(-1\) 在某个位置“相撞”后两个效果同时消失。于是破环为链做一个类似括号匹配的东西即可。
11.20 Wed.
每周一次的专题。今天是 DP。
上午先改了前一天 T4,T2。然后做了两道专题的 T1,T3。
下午听讲课。
晚上吃完饭回来把专题 T2 做了,然后来写点博客。
周六有 NFLSPC,所以明天有模拟赛,专题来不及刷。
Codefestival2017_qualC_f Three Gluttons
11.19 NFLS模拟赛 T4/codefestival2017 qualC-F
DP 题,重点是对限制的转化。
NFLS#P10305 相信武魂真身
11.19 NFLS模拟赛 T2
如果选出来是一个偶环,一定不如选出来一条边。考虑把边权设为 \(1-(c_u+c_v)\),由于前面的限制所以没有负边。
把一个点拆成两个,找到一条从 \(u_0\) 走到 \(u_1\) 的最短路。可能会有重复经过某个点的问题,这样一定可以截取出一个更小且合法的奇环。所以跑最短路把走过多少边当第二维边权,取边权最少的即可。
QOJ#7864 Random Tree Parking
2nd-Universal-Cup Macau H
设 \(f_{i,j}\) 为 \(i\) 子树中有 \(j\) 个点要跳到子树上方,\(j<dep_i\),同时保证了树高期望为 \(\log\),所以直接做。
QOJ#9479 And DNA
3rd-Universal-Cup Sendai D
自己过的,但是给 K8 讲的时候发现自己上午推的不太严谨。考虑拆二进制位。
一位上的贡献有三种 \(0,1,2\),即对当前位贡献 \(0\),对当前位贡献 \(1\),和进位(对高一位贡献 \(1\))。
设四个连续数的第 \(i\) 位组成的两个三元组的贡献分别为 \(a,b\),手玩一下可以发现 \(a\) 和 \(b\) 不可能一个为 \(0\) 一个为 \(2\)。所以考虑最低位,由于不会有低一位给它进位,所以这一位的 \(n\) 个三元组的贡献均相同,推而广之在任何一种情况中,每一位的 \(n\) 个三元组的贡献都是一样的。
贡献为 \(0\) 只有一种可能是全是 \(0\),贡献为 \(2\) 只有一种可能是全是 \(1\)。
手玩一下发现贡献为 \(1\) 要使得 \(0\) 的连续段长度 \(\leq 1\),\(1\) 的连续段长度 \(\leq 2\)。可以直接搞个矩乘,不知道有没有递推式,由于是一个环所以要取头尾相等的。这样就算出了一个二进制位贡献是 \(1\) 的方案数。
再设一个小 DP \(f_{i,j,0/1}\) 表示前 \(i\) 个位,有 \(j\) 个位要求贡献是 \(1\),是否进位。转移是平凡的。
QOJ#8049 Equal Sums
2nd-Universal-Cup Shanghai C
诶,这个 trick 蛮有意思的。
设 \(f_{i,j,k}\) 表示 \(\sum\limits_{p=1}^i a_p - \sum\limits_{p=1}^j b_p = k\) 的方案数,状态数 \(O(n^3V)\)。
将 \(k\) 限制在 \([-V,V]\) 之间,当 \(k\geq 0\) 的时候向 \(f_{i,j+1}\) 转移,反之亦然,状态数 \(O(n^2V)\)。做的时候滚一下数组,转移的时候前缀和优化。
11.21 Thu.
怎么又是赛时写了假做法过了?
上午模拟赛 \(100+100+20+40\),上来三十分钟过 T1(虽然有点假),然后发现 T2 是大模拟,T3 以为是博弈论(后来发现没博弈论啥事),T4 是奇怪东西。看了眼后俩题只会指数级暴力,所以把 T2 打了,打完剩了不到俩小时。T3 觉得无法思考就去看 T4 了,突然发现很插头 DP,特殊性质只需要把矩形不同方向做四遍记录一下就能再多过一个包。把两个题打完时间大概就差不多了。
后来发现 T4 是在特殊性质基础上继续推广就行了……
NFLS#P17128 网页 CSS
11.21 NFLS模拟赛 T2
不过其实也不好说,CCF 往正赛放大模拟次数也不少,而且这道没多难写吧?
洛谷P3590 TRZ
11.21 NFLS模拟赛 T1/POI2015
先前缀和差分,记一下每个数出现多少次,维护形如 \((c_0-c_1,c_0-c_2,c_1-c_2)\) 的三元组。
可以证明只需要记录本质不同的 \(12\) 个三元组即可,可以直接搜,记一位上的状态为 \((0/1,A)\) 表示这一位一定是/不是 \(A\) 序列中的数。
洛谷P6557 Yesterday Once More
11.21 NFLS模拟赛 T4
这个题目名,唉,想衡实了,Those were such happy times.And not so long ago.How I wondered where they'd gone.
插头 DP 好像还是比较好看出来的。
一个格子没有插头时可以不增加插头,也可以新增一个插头。有插头时可以结束该插头,或沿该插头方向延伸插头。\(T=0\) 就做完了。
然后修改一整行的话相当于分割成两部分,两侧互不影响。可以直接从第 \(1\) 行到第 \(n\) 行做一遍,从第 \(n\) 行到第 \(1\) 行做一遍,然后就可以直接得到答案;修改一整列同理。
修改单个点可以类似的将格子编号在 \((x,y)\) 之前和之后的合并起来,需要枚举一下转移到 \((x,y)\) 时的轮廓线状态。4,5 类型操作也是同理的。
直接将矩阵旋转四次做四遍插头 DP,考虑一些细节就做完了。
NFLS#P5056 Alter//Strife
11.21 NFLS模拟赛 T3
比较深刻的可能是设 \(f_{i,j}\) 为当前 \(\gcd\) 为 \(i\),选出来了 \(j\) 个数的方案数。这样已经选出来的数一定是 \(i\) 的倍数,所以状态数只有 \(O(\sum\limits_i d(a_i))\) 个。
然后预处理一下每个数 \(i\) 有 \(s_i\) 个倍数,每次转移可以选出来一个数使 \(\gcd\) 变小,也可以在 \(s_i-j\) 个数中选出来一个数使 \(\gcd\) 不变,这样做的好处是我们无需关心哪些数被选过这个瓶颈了。
总时间复杂度 \(O(V+n^2d(V))\)。
11.22 Fri.
效率还行,但是状态不是很好,感觉有点疲惫。
上午模拟赛 \(100+100+49+32\),T1 唐题但是搞了一个小时,T2 唐题搞了不到一个小时;先看了眼 T3,然后看了眼 T4,感觉 T4 原神玩的有点多,不过倒是有 32 分能直接打;回头看了看 T3,以为自己会删除,于是狂做 C,D 性质不止,后来发现自己只会 A 性质,又努力了一会企图自己发明很牛的并查集,当然不可能。剩半个小时把后两题打了,大众分。
赛后听 5k 说线段树分治恍然大悟,又是一个自己从来没有思考过的东西。
洛谷P9743 旅行
11.22 NFLS模拟赛 T1
唐题使我犯唐。直接做,可以稍微剪一剪枝,需要滚动数组。
洛谷P9034 Again Counting Set
11.22 NFLS模拟赛 T2
分类讨论题,我觉得有趣,但是分类讨论题有写题解的必要吗?反正就是先对着第三条讨论,然后对第四条讨论。
NFLS#P16323傳自我的手機
11.22 NFLS模拟赛 T3
线段树分治+数学,TBA.
洛谷P10175 Subtree Value
模拟赛 T3 类似,比 T3 简单,TBA.
11.23 Sat.
NFLSPC#7,TUOJ 见过没?502 见过没?Creating 见过没?真·罚坐见过没?
和 jijidawang 一队,队名叫“开发少了,间接费多了”,场外 RK9,感觉还行。好像有点拖 jijidawang 后腿,贡献大概是 44%。赛时被 OJ 控的有点难受,因为过于卡导致可能一份代码交了多次,不过罚时的确没啥影响。
开题看 C,确实是签吧,扭头看了一眼 jijidawang 也在看 C,说了两句就去开 D 了。在 00:18:19 时和 jijidawang 在同一秒分别通过了 D,C。
发现榜上 E 过了不少,瞄了一眼不想理就去看 B 了。做了一会转化成了“单点 \(+1\),全局查最大前缀和,全局 \(a_i\gets a_i-i\)”,不会做,写了个线段树上暴力修改大概不到俩 \(\log\) 过了 \(2e5\) 就弃了,此时 01:07:08。
之后 jijidawang 跟我说 J,说“只需排序后取前 \(B=40\) 个即可”,“为啥”,“显然”,“那你不做完了”,“这不是 \(2^B\),爆炸了”。看了一眼会 \(O(B2^n)\),而且 jijidawang 写的确实过了小包,直接开写。在此期间 jijidawang 写了一些 G 的分,说 E 就是先手必胜,“不服来叉!”,看了眼榜上确实过了很多就服了。
写完 J 交上去 01:43:08,发现 OJ 已然爆炸。被控了很久心情已经不好了,随便看了看题打算摆了。然后 jijidawang 跟我说 F,大概已经做完了但是有个细节是顺子怎么处理两侧,当时两个人想的都有点复杂,我想到判掉有牌和这张牌相等的情况以后,一定可以选出来一张和顺子另两张牌不相邻的牌,很快就解决了。赛后发现实际上判掉以后随便选一张就行了。
后来看了看 K,发现暴力分有点多,于是就打了打暴力。中间终于测出来了,发现 J WA 了,我说 \(B=40\) 是假的,商量了一下把 \(B\) 开到 \(75\) 后来就过了。把 K 写完交上就下班了。
后来下午来了复盘了一下 NFLSPC,然后看到有基础赛就想随便打一打,看了 T5 发现小唐题,顺手写了。发现 T4 过得比 T5 少,又想了想,顺手写了。感觉不如继续写完得了,T3 写完被 T2 控了一会???然后出去上厕所被涛哥拉去听奇怪东西,不过好像没什么效果。
打基础赛的时候听说了一些事,有点火大,但是 Aqr 说的对啊,“确实是,但是能有什么办法呢?”。
然后突然就体活了,打了三局篮球。第一场有点焦灼,不过最后险胜了,可能大家都还没进状态,刚开始打是比较累的。第二场把对面零封了。第三场没打完以 Ratio 受伤结束了,最后应该是对面 10 我们 9,打的 11 分局。你说为什么有单数?当然是我进了个三分。总共进了五六个球吧?明天早上还有!
虽然是训练纪要,但是训篮球怎么就不算训呢?加训加训。
回来以后听到了一句话,有点被触动。总之还是要活在当下,感受生活!
晚上 ARC,感觉特别累打了一题就跑了。
而且今天是不是没写什么有意义题。
11.24 Sun.
早上体活去打篮球了,把手挫了一下,左手小拇指肿了。
上午自己开 PNR#8,过了前仨题,T4 有点困难部分分也没怎么想。
下午没啥状态,后来看见 CF 上有 ICPC 就和 K8 还有 jijidawang 开,但是仨人都挺摆的,一会就跑路了。大战半天 M 无果。
晚上一群人去校长办公室造反。没啥学习状态。
QOJ#7717 Bitsets
PNR#8 T1/Petrozavodsk-Summer2023 D2-B
相当于要求 \([l,r]\) 中有多少个位完全相同,所以把每个位分开考虑,把一个位拆出若干连续段 \([l_i,r_i]\),一个 \([l_i,r_i]\) 有贡献的查询是 \(l\leq l_i,r\geq r_i\),主席树维护之。
UTPC_2021_E Bounding Box
PNR#8 T2/UTPC2021 E
感觉还是有些许趣味的。
首先如果没有那些关于坐标的贡献,肯定是选出来前 \(k\) 个最优。而关于坐标的贡献最多出现在 \(4\) 个点上,所以答案一定是形如选出来前 \(k-s\) 个点,再在后 \(n-(k-s)\) 个点中选出来 \(s\) 个点,其中 \(s\in[0,\min(4,k)]\)。
于是我们考虑钦定一些点的坐标给答案贡献。比方说我们钦定选出来了点 \(i\) 并且给答案一个 \(X_i\) 的贡献,但其实我们不需要保证 \(X_i=X_{\max}\),因为对于同一种选择方案,当你钦定 \(X_{\max}\) 给正贡献,\(X_{\min}\) 给负贡献的时候答案一定是最大的。
于是可以设计 DP,\(g_{i,s,j}\) 表示在 \(i\sim n\) 这些点中,选出来了 \(s\) 个点,\(j\) 是状压了四种特殊贡献有没有被钦定过。转移的时候枚举 \(16\) 种状态,即钦定当前点 \(i\) 给某些特殊贡献。
然后对前缀同样做一遍,不过不用记选出来过多少个点了,然后就做完了。
QOJ#1251 Even rain
PNR#8 T3/Petrozavodsk-Summer2020 D1-E
一个点 \(i\) 的积水高度是 \(\min(\max_{j=1}^{i-1} a_j,\max_{j=i+1}^{n} a_j)\)。考虑以最大值为分割点,前缀后缀分别 DP,注意钦定多个最大值时取哪一个。
设 \(f_{i,j,p,s}\) 表示前 \(i\) 个位置,进行了 \(j\) 次操作,当前奇偶性是 \(p\),上一个最大值是 \(s\) 的方案数。对于同一个 \(i,j,p\),\(s\) 不会有很多种,拿 umap
存起来就行。
11.25 Mon.
无聊的下雨天,今夜挫败的心情更加明显
阴天下雨,困得要死,上午模拟赛直接摆了,基本是睡了一整场,下午改题也直接摆了。
赛时乱搞过了 T3,下午改了 T1、T2,然后接着摆,发现很不想改今天后俩题,去改昨天 ICPC M 了。
找 NT 问了一下昨天 ICPC M,发现是漏读了一个条件,恼火恼火。
感觉算是歇好了,正好还有三天,感觉再用心打两场模拟赛,最后一天重点在打板子上。
“别说一不在乎二没期望”,到了这种时候还是会患得患失的。
反正剩下三天多把重点放在复习板子和保持模拟赛状态和手感上,开开心心就好了。
NOIP 打完又有假?不懂怎么能做到两周一放的,不过假照样很短。
S8PC_5_E Broken Skateboard
11.25 NFLS模拟赛 T1/S8PC_5 E
直接设 \(f_{i,j}\) 是在第 \(j\) 次到达的石砖是 \(i\) 时,还需要多长时间可以到达奖励点。
S8PC_6_G Medals
11.25 NFLS模拟赛 T2/S8PC_6 G
分类讨论题,不写题解了。
CF2041M Selection Sort
那这题其实还挺水的。
考虑第一次操作是对 \([1,i]\) 这一段前缀排序,不过操作不一定要操作到 \(i\),只需要操作到第一个不是前缀最大值的位置即可。
然后这时找到最小的位置 \(j\),满足“应该在这个位置上的数”的下标在 \([i+1,n]\) 中,然后对 \([j,n]\) 进行一次操作。若找不到这样的位置,则只需要实现对后缀 \([i+1,n]\) 的排序,类似之前对 \([1,i]\) 的排序处理。
由于我们钦定第一次操作是前缀,所以要把数组翻转一下再做一遍。
11.26 Tues.
模拟赛,改题,摆烂。
洛谷P11338 LJEPOTICA
11.26 NFLS模拟赛 T1/COI2019 T2
一眼数位 DP 挺明显的,只有极少细节。
洛谷P11340 TENIS
11.26 NFLS模拟赛 T2/COI2019 T4
对所有 \(o\in[1,3],i\in[1,n-1]\),连一条从 \(a_{o,i-1}\) 到 \(a_{o,i}\) 的边,一个点合法当且仅当可以到达所有点。
直接做是动态缩点,考虑把第一条链拿出来当做 dfs
树,维护剩下的返租边即可。相当于找到第一个不能到达其父亲的点。
把返租边看做区间加,查询看做查第一个为 \(0\) 的位置,拿线段树维护,修改时直接删掉一些加上一些返租边即可。
洛谷P11337 IZLET
11.26 NFLS模拟赛 T3/COI2019 T1
挺有意思的。
首先距离为 \(1\) 的点肯定是若干极大同色连通块的形式,把一个同色块连成一个菊花拿根作为代表。
然后距离为 \(2\) 的点构成若干极大双色连通分量,每一个连通分量的导出子图都是完全图的形式。两个双色连通分量至多有一个公共点。由于同一个连通分量只需黑白染色,连通分量外的点也不会产生影响,所以连通分量中树的形态是无所谓的。同时导出子图又是完全图,所以直接随便拉出来一些边使整个图联通就是对的。
染色的时候直接类似特殊性质染色就好了,加入一个点时看看需不需要和先前某个颜色相同。
11.27 Wed.
过昨天 T4 是今天早上的事。
模拟赛,不改题,摆烂。
cnm。
QOJ#6660 택시 여행
11.26 NFLS模拟赛 T4/KOI2023 D1T3
换乘的 \(B\) 值是单调递减的,所以按 \(B\) 降序考虑所有点。
拿点分树维护这个事情,代价是一次函数的形式,所以每个点上拿单调栈维护一个凸包。
到一个点最后一步 \(B\) 不一定符合单调递减,只需要所有点插入完后在查询一遍。
NFLS#P10137 交换
11.27 NFLS模拟赛 T1
签到签一个小时。
找出来最大的 \(x\) 满足 \(1\sim x\) 的和小于等于 \(x+1\sim n\) 的和,然后不断 --x
枚举。
当目前两部分相等,在前半部分选两个点或在后半部分选两个点即可。
当目前两部分不相等,记 \(del\) 为差,当 \(del>2(n-1)\) 时直接 break
就行,否则当前方案是 \(\min(n-del,x)-\max(x+1-del,1)\)。
NFLS#P1224 神奇纸牌
11.27 NFLS模拟赛 T2
如果一个点数选择了多个颜色,把这些点之间连上边。一种方案合法需要满足所有至少选择了一张牌的颜色联通。
直接枚举选择了几种颜色的牌,之间最多只有 \(6\) 种边,然后把所有边的情况状压一下,矩阵加速转移。