训练纪要伍

训练纪要肆摆了,因为前几天状态有点过于不好了。

一眨眼 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\) 张特殊牌停止则需要重新做,那么:

\[\begin{aligned} E_{\min}(x)&=\dfrac{m}{m+x} E_{\min}(x) + f(x) \\ E_{\min}(x)&=\dfrac{m+x}{x} f(x) \end{aligned} \]

继续求出 \(f(x)\)\(f(x)=1+\sum\limits_{i=1}^{n-x} \dfrac{(n-x)^{\underline i}}{(n+m)^{\underline i}}\),其中枚举的 \(i\) 是第几次抽牌,求和的是第 \(i\) 次抽牌时还没有抽到的期望。

对组合数进行推导,有式子:

\[\dfrac{a^{\underline i}}{b^{\underline i}}= \dfrac{a!(b-i)!(b-a)!}{(a-i)!b!(b-a)!}= \dfrac{b-i \choose b-a}{b \choose a} \]

代入可得 \(f(x)=1+\dfrac{\sum\limits_{i=1}^{n-x} {n+m-i\choose m+x}}{n+m\choose n-x}\)

UPD:好像没必要在这步代入的。

求和后面变成什么列求和,即:

\[\begin{aligned} \sum\limits_{i=m}^n {i\choose m} &= {m\choose m+1} + {m\choose m} + \sum\limits_{i=m+1}^n {i\choose m} \\ &= {m+1\choose m+1} + {m+1\choose m} + \sum\limits_{i=m+2}^n {i\choose m} \\ &= \cdots \\ &= {n+1\choose m+1} \end{aligned} \]

于是 \(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\) 结尾的本质不同子序列数,有转移:

\[f_{i,j}=\begin{cases} f_{i-1,j} & j\not= s_i \\ 1 + \sum\limits_k f_{i-1,k} & j=s_i \end{cases} \]

可以写成矩乘的形式,即每次右乘上一个大小为 \((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_p[i][j]=\begin{cases} 1 & i=j\bigvee j=s_p \\ 0 & otherwise\end{cases} \\ \]

\[G_p[i][j]=\begin{cases} 1 & i=j \\ -1 & i\not=j\bigwedge j=s_p \\ 0 & otherwise\end{cases} \\ \]

\(F,G\) 的前缀积分别是 \(A,B\),要求的答案是:

\[\begin{aligned} ans+1&=\sum\limits_{i=0}^m (B_{l-1}A_r)[0][i] \\ &=\sum\limits_{i=0}^m \sum\limits_{k=0}^m B_{l-1}[0][k] A_r[k][i] \\ &=\sum\limits_{k=0}^m B_{l-1}[0][k] \sum\limits_{i=0}^m A_r[k][i] \end{aligned} \]

也就是我们实际上只是要求 \(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))\)

posted @ 2024-11-09 19:41  int_R  阅读(294)  评论(46编辑  收藏  举报