把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

集训队互测2025

Round 1

飞带长队的题!一些碎碎念待补

Round 2

开考延迟了半个小时,怎么会是呢?

发现 T2 是个 DS,然后发现某一个特殊性质就不太能 polylog 做了,于是考虑撒点树分块,然后对完了,写了写卡了卡常 1h 过了。

仔细阅读一下 T1 题面,发现好像并不是很困难,写了 1.5h 交上去获得了 \(22\) 分的好成绩。仔细思考发现我并不会算循环节,猜了个展开的结论发现错完了只能过 \(58\),但是把展开次数变大就能过 \(76\) 了。

吃饭+思考了 1h 发现啥都不会,于是卡了卡常把展开次数再变大一倍然后就过了,感觉我和出题人都挺唐。

这时候还有 0.5h 看 T3,发现只会 \(D=0\) 并且还不一定能写出来,于是写了个 \(3\) 分暴力开摆了。

本来觉得会被大家大胜,但是 T1 去尝试乱搞的好像没有几个,于是就没有被大家(除了 cxy)大胜,还为 cxy 贡献了愉快的一天!

_20241022085056.png

_20241022085141.png

生命的循环 by yxh

居然不是 poly 的,我糖丸了。

首先发现只有一个 \(1\) 进入到一个环中才能循环起来成为周期,所以对于每个 SCC 考虑。

假设全图都在一个 SCC 中,则我们要求的相当于是所有环长的 gcd。因为所有环长 \(\leq B\),所以枚举这个 gcd 然后 \(O(m)\) 判定即可。

然后发现一个本来周期为 \(x\) 的点经过一个 SCC 后周期会和这个 SCC 环长的 gcd 取 gcd,于是用个搜就能搜出在 \(n\) 号点处的一些二元组 \((x,y)\),表示在足够长的时间后,\(t\bmod x=y\)\(t\) 是为 \(1\) 的。不满足任何一个二元组的为 \(0\)

如果对于所有没有出现的二元组 \((x,y)\),满足 \(t\bmod x=y\) 的位置中至少有一个 \(0\),则求周期是简单的。现在我们需要将原来没有出现,但是实际上没有 \(0\) 的二元组 \((x,y)\) 补齐。

考虑枚举解模 \(I=2^5\times 3^3\times 5\times 7\) 的余数,这时对于所有的 \(x\)\(\frac{x}{\gcd(x,I)}\) 要么相等要么互质。互质的限制之间没有影响,相等的限制之间类似于一个取交的过程。于是就可以用 \(O(B^2I)\) 的时间补齐这样的二元组。总时间复杂度 \(O((n+m+I)B^2)\)

submission

但是实际上可以进一步缩小 \(I\) 的范围!注意到如果 \(\frac{x}{\gcd(x,I)}\) 要么相等要么同为某个质数的幂次也是可以做的!于是 \(I\) 就可以折半到 \(2^3\times 3^2\times 5\times 7\)代码不想写了

树上简单求和 by xde

树分块,满足每个点往上到最近的关键点不超过 \(\sqrt n\) 步。

修改转化成前缀修改,先暴力做非整块部分,容易用一个 \(O(1)-O(\sqrt n)\) 分块做到。然后对于整块,在第二棵树上预处理前缀和就行了。时间复杂度 \(O((n+m)\sqrt n)\)

submission

路径计数 by zhy

poly 我哪会啊???

upd:会了,但是待补。

Round 3

开考看 T1,发现是环上邮局经典题,先放一放。看 T2,发现部分分前 \(50\) 很唐,还有 \(20\) 可能也很唐,感觉是个唐题。看 T3,发现 \(O(n^2)\) 暴力只有 \(34\) 分,感觉是个观察一点性质就能写出一个 poly 做法,然后用个数论分块优化的题。

然后做了 1h T2 以及 1.5h T3,啥都没做出来,破防了。

2.5h 的时候想着回去把 T1 写了,写着写着发现是 3 个 log 的!硬着头皮写完发现只有 \(60\)。感觉需要上个压位 Trie,但是我不会啊???破防了。把 T2 暴力 \(50\) 和 T3 暴力 \(4\) 写完就下考了。

感觉被大家大胜了,结果真的被大家大胜了!

环上排序信息最优分割 by zxb

zxb 真会出部分分……

如果能枚举起点,做 DP 是简单的,并且因为满足决策单调性,容易用 set 优化到 \(O(n\log n)\) 单次。

然后发现整体也是有决策单调性的!具体的,记 \(l_{i,j}\) 为起点在 \(i\),在第 \(j\) 段的划分点是什么,则满足 \(l_{i,j}\leq l_{i+1,j}\),于是枚举起点的同时再套一层分治就行了。选取最短的段作为起点即可做到 \(O(n\log ^3n)\)

然后发现我们 set 要做的事情只有维护前驱后继,于是可以直接上压位 Trie,或者只删除不加入的回滚链表。时间复杂度 \(O(n\log ^2n)\)

submission

Round 4

成为了 DX 的验题人,于是成功避雷了这场比赛!

观虫我 by ylq

之前以为这个题是不能优于 \(O(q2^\frac{n}{2})\) 的!被震撼到了!

我们显然有一个 \(O(2^{\frac{n}{2}})\) 处理一次操作的做法:对于修改,让前半部分的 \(0\)\(1\) 贡献,对于询问,让后半部分的 \(1\)\(0\) 查询贡献。

考虑这个东西的本质是啥,容易观察到相当于修改是一个 \(2\times 2\) 的矩阵 \(\mathbf A\),查询是一个 \(2\times 2\) 的矩阵 \(\mathbf B\),要满足

\[\mathbf A\times \mathbf B=\begin{pmatrix}1 & 1 \\ 0 & 1\end{pmatrix} \]

这两种方法情况分别对应了

\[\begin{pmatrix}1 & 0 \\ 0 & 1\end{pmatrix}\times \begin{pmatrix}1 & 1 \\ 0 & 1\end{pmatrix}=\begin{pmatrix}0 & 1 \\ 1 & 1\end{pmatrix} \]

\[\begin{pmatrix}1 & 1 \\ 0 & 1\end{pmatrix}\times \begin{pmatrix}1 & 0 \\ 0 & 1\end{pmatrix}=\begin{pmatrix}0 & 1 \\ 1 & 1\end{pmatrix} \]

显然我们需要再编一种方法出来,考虑容斥,枚举哪些位是 \(0\) 就可以得到

\[\begin{pmatrix}0 & 1 \\ 1 & 1\end{pmatrix}\times \begin{pmatrix}1 & 0 \\ 1 & 1\end{pmatrix}=\begin{pmatrix}0 & 1 \\ 1 & 1\end{pmatrix} \]

考虑到每一位可以独立选择使用哪一种方法,我本来以为能像 毒蛇の脱走 一样写出一个 \(O(2^{\frac{n}{3}})\) 的做法,但是不能(

但是如果我们随机化呢?对于每一位,我们在三种方式中随机一种方式对这一位进行操作。这样的正确性如何呢?

考虑每一次修改/询问操作在所有 \(3^n\) 种选取方案中需要操作次数的总和,假设当前是修改操作,则某一位需要枚举当且仅当这一位是 \(0\) 且选择了操作 \(2\),或者这一位是 \(1\) 且选择了操作 \(3\),那么操作次数总和是 \(O(4^n)\) 的,查询类似。则如果我们随机选取单次操作的期望复杂度是 \(O((\frac{4}{3})^n)\) 的。但是这个随机的方差会很大,所以需要多随机几次找到最小操作次数的操作。

对最后 \(\log \omega\) 位进行状压,即可做到\(O(q(\frac{4}{3})^{n-\log \omega})\)submission,在胡策 OJ 过不了一点。有没有老哥教教啊?

但是赛时唯一通过的 lhx 给出了一种近乎暴力的做法:将 \(32\) 位拆成四份,维护每个修改对这四份的影响,查询的时候与起来即可。需要对于修改手写 bitset,是 \(O(q2^{\frac{n}{4}}+\frac{q^2}{\omega})\) 的。 submission,因为常数非常小所以在胡策 OJ 嘎嘎乱过。

Round 5

开场发现 T1 很唐,随便写了写过了。

然后推了推 T3 的性质发现啥都推不出来,于是考虑怎么优化暴力,发现和希望很像,大概需要写个主席树,这辈子都是不可能写的,于是开始看 T2,发现大概莫二离一下就行了,写的时候唐了挺久,到 3.5h 的时候过了。

最后给 T3 补了 26 分暴力下播了,发现大家都不想写 T3,于是混到了 rk1。

Round 6

开场先吃了半个小时早饭,看了看题,发现 T1 很小清新,T2 能做?T3 感觉和 22年 D2T2 比较像的题。

先把 T1 给写了,然后看了看 T3 有一些想法,回去看了看 T2 发现 Karatsuba 能做到 \(O(7^n)\),过了 \(n\leq 10\),然后发现其实可以做到除了拉丁方 \(O(6^n)\),拉丁方补一个三进制 FWT 就行,于是写到 3h 的时候过了。

T3 想了一会儿发现会了个贪心,先写了个暴力发现过不去一点,但是我大样例全过了啊?调到 4h 没调出来哪里错了于是想写了个更暴力的暴力对拍,发现更暴力的暴力还是过不去??

这时候有点破防,冷静一下发现我没考虑一个点同时有两种操作的情况,直接开始改第一份暴力,改完就对了,还剩 0.5h,加了个线段树就过了。

感觉大家会再 AK 一个,但是 zj T3 暴力没调出来,lhf 和 cxy T3 是 2log 的,于是苟到了 rk1。

Round 7

开场先看了三个题,1.5h 的时候发现都会了,优势在我!

于是决定先写 T2,先写了个暴力,然后先没管空间写了一下发现 \(n\leq 5000\) 的部分还是能过,但是 \(n\leq 2\times 10^5\) 过不去???啥玩意???然后看了 1h 发现某个位置指针往后少移动了 1,改了就过了 50,剩下的 MLE 了。这时候其实还是在意料之中的,然后改了改将静态空间压到 70MB,再交了若干发还是过不去就红温了。我发现不管我怎么造这棵树,动态空间都超不过 80MB,我到底是怎么 MLE 的???OJ 上显示我需要 180MB 内存,不懂。

去翻了翻官方群,发现有人说胡策 OJ 对于递归的空间非常大,于是把所有 dfs 都改写成循环,发现就过了,只用了 70MB。和 T2 出题人爆了!

这时候已经 4h,感觉要飞龙骑脸输了,先去吃了个饭冷静一下思考 T3,发现 T3 挺好写的,于是先写了个暴力,发现还是过不了一点,调到 12:51 发现有个地方多了个等号,改完就对了。但是还剩 9min 写集贸正解啊???于是开始拼暴力,结果啥都没拼出来,10 分遗憾离场。

最后被大家倍杀了,嘻嘻。

Cyberangel

2log 直接写就能过了,1log 要考虑的可就多了。

考虑分治,按照权值从大到小加入点,维护两边单调栈。

计算贡献大概需要在某一边的单调栈,可以直接二分 \(O(n\log ^2n)\),也可以并查集 \(O(n\log n\alpha (n))\),由于常数原因两个跑得差不多快。

submission

新生舞会

和卡空间的出题人爆了!

首先如果不卡空间这题就很唐,直接维护 Trie 合并,支持整体 xor 就好了。

压缩 Trie 是不可能写的,这辈子都不可能写的。考虑用树上 dsu 替代掉动态开点的合并。注意到一个点的 sg 值不超过其子树大小,于是在每个重链顶压位记录这个点的子树内哪些 sg 值是有的,然后和一般 dsu 类似做就行。

时间复杂度看上去是 2log 的,但是实际上因为每次修改都是修改一个连续的区间,所以复杂度是 \(O(\log n+siz)\) 的,所以时间复杂度 \(O(n\log n)\),空间复杂度 \(O(n)\)。注意在胡策 OJ 上不能写递归。

submission

PM 大师

如果能维护出对答案造成影响的 \(a_i\not=0\) 集合 \(S\),则询问第 \(y\)\(0\) 的答案就是不在 \(S\) 中的第 \(y\) 小值。

考虑将一次操作拆分成先将 \(a_x\to -1\),再将 \(-1\to k\),我们分别考虑每个操作的影响。

当我们将 \(-1\to k\) 的时候,需要考虑 \(a_x\) 是否变得对答案造成影响。一个简单的判定方式是:如果 \(x\) 前面的 \(0\) 的个数加上 \(x\) 前面比 \(k\) 小的且对答案造成影响的数的个数小于 \(k\),则这个数就会造成影响,否则不造成。

但是这样判定有点困难,直接做是一个动态二维数点的过程。考虑如果有一个 \(y>x,a_y<a_x\),且 \(a_y\) 对答案造成了贡献,则 \(a_x\) 一定对答案造成贡献。也就是说,把上面的判定方式放缩成: \(x\) 前面的 \(0\) 的个数加上比 \(k\) 小的且对答案造成影响的数的个数小于 \(k\),是不会影响答案的,这样就可以用树状数组简单统计了。将 \(a_x\) 计算入答案可能会导致后面的某一个数对答案不造成影响,也可以用上述类似的式子判定。\(a_x\to -1\) 也是类似的,如果当前的 \(a_x\) 对答案造成影响,删去后会导致至多一个后面的数重新对答案造成影响。

容易发现上面的过程都可以用一个值域上的线段树维护,时间复杂度 \(O(n\log n)\)

submission

Round 8

感觉这场有点色了。

先看了一下三个题,感觉 T1 和 T3 差不多简单,T2 有点 hard。

先开 T1,发现从上到下确定就好了,大概需要写一个子树 mex,均摊一下就 1log 了,1h20min 过了。

看 T2 发现并没有我想象得那么困难,好像树分块之后块内树上背包,块间 NTT 就能做到 \(O(n\sqrt {n\log n})\) 了,拉了个 poly 板子 2h 的时候过了。

接下来 3h 写一个 C,怎么输!先写了个暴力贪心发现过了,接下来看上去只需要一个动态区间 k 大值以及一个动态二维区间 min 就行了。怎么输!然后我 3h 树套树没调出来,遗憾离场。

赛后得知树套树其实也过不去,需要整体二分。并且树套树连 70 都没有,感觉这个 T3 太幽默了。

Round 9

开场发现 T1 光 \(k=0\) 都很难写,\(k=1\) 想必不能做,于是先跳了。

然后看 T2,发现拆贡献以后是个签,乱写了一下过了。时限 5s 跑了 300ms 还是挺幽默的。这时大概 1h。

T3 刚开始大概只会一个 min_25,观察了一下发现一个抽象做法,猜了一下能分析出 \(O(\sqrt n\log n)\) 的复杂度,写了一下好像真的是这个量级的。

于是感觉赢了,把这个做法实现了出来,结果常数过大连 \(10^{14}\) 都要跑 5s,喜提 min_25 筛的分。

卡常卡到了 11 点发现不能要了,于是思路打开,发现好像直接做就是 \(O(\sqrt n\log n)\) 的!并且常数非常小!写了一下 \(m=0\) 发现能过 \(10^{14}\),然后写了一下 \(m=1\) 直接一下过了 \(63\)

发现 \(10^{14}\) 其实只跑了 400ms,所以 \(10^{15}\) 应该随便跑,改了一下过了最后一个包。

但是 sub9 拼尽全力无法战胜了!接下来一个小时卡进了 3.3s,但是并没有什么用,遗憾离场了。

本来觉得大家 T1 会获得一定的暴力分,但是好像大家没几个想去写这个 dirty work,于是排名还能看。

月亮的背面是粉红色的

首先你要会 divcnt1,否则在胡策 OJ 上无法通过。

后面待补。

Round 10

开场看 T3 发现是个签,40min 过了。

然后觉得 T2 很能做,对着特殊性质 A 做了 1.5h 啥都没做出来,于是开始打表,差分之后发现了一点规律,感性理解一下会了。在 4h 的时候过了 \(75\)。剩下 \(25\) 因为我的式子比较难看所以没看出来怎么优化。

然后 T1 有巨大多暴力分,但是没写完,喜提 \(60\)

看榜发现 T1 被大家薄纱了!

计算几何

我觉得这个题很牛!

首先考虑 \(B_i=0,|A_i|\leq 10^6\) 的情况,这时如果区间长度大于 \(\sqrt A\) 根据生日悖论期望答案是 \(0\)。所以只需要搓个暴力跑比较小的部分就行了。

考虑扩展这个想法。如果我们能找出前 \(k\) 小的点对,那么对于一个询问,如果包含了某个点对就会得到答案,否则用暴力去做。写一下发现 \(k=O(n)\) 的时候能过。

首先我们发现,对于两对点对 \((i_1,j_1),(i_2,j_2)\),记它们的距离为 \(w_1,w_2\),如果满足 \(i_1\leq i_2\leq j_2\leq j_1,w_2\leq w_1\),则前一对点对是没有用的。

那么如果我们将

待补

Round 11

开场发现 T3 楼房重建一下就没了,T1 有点困难,T2 有点类欧。这时候 0.5h。

先花 1h 写了一下 T3,发现群里大家怀疑这个题数据错了,于是开始拟合出题人怎么错了,发现是开 long long 自然溢出就好了,比较幽默。

然后看了看 T1 发现是对于每个连通块找直径中点然后变成点分治板子,写了 1h 拿到了 95,然后卡了 1.5h 的常还是 95,红温了。

看了 T2 去吃饭,发现 T2 是 DSU 和类欧区间查询的二合一题,先写了个 DSU,写完发现没时间写类欧区间查询了,于是拼了点暴力跑路了。

最后被大家大胜了!

联通块

感觉这题最有教育意义的是教会了我怎么数联通块。

考虑一个联通块的直径 \(u\sim v\),假设其中点为 \(p\),则以 \(x\) 为圆心,半径为 \(r\) 的圆能包含这个联通块当且仅当 \(dist(x,p)+\frac{dist(u,v)}{2}\leq r\)

求出这个直径可以用 st 表区间查询维护,剩下变成一个点分治板子题。不知道为什么胡策 OJ 上 sort 特别慢,在比较大的时候使用基数排序可以获得比较好的优化效果。

submission

Round 12

打 ICPC 去了,不过 lhx 怎么开场前半个小时还在卷互测😡

Round 13

因为吃早饭迟到了,致敬传奇小粉兔。

看题发现 T1 有点困难,T2 大概优秀的拆分卡卡常就没了,T3 不是很会但是很眼熟。

先写 T1,发现可以只有前缀加,然后就大概变成了一个树剖题,但是树剖上要维护一些奇奇怪怪的标记,写了 2.5h(为啥这么久?)过了。

然后看 T2,先写了个 SA,然后回忆了一下优秀的拆分怎么做。写完交上去发现它把我 2log 的 SA 卡掉了🤡,50min 的时候过了。

去写 T3,发现我大概只会一个普及组格雷码和一个普及组爆搜,先写了获得 36 分然后把爆搜挂在那里跑 \(n=6\)。思考了一下 \(n=6\) 怎么构造发现会了一个奇奇怪怪的构造方法,大概是 \(O(2^nn)\) 的,没写完遗憾离场了。

胡策榜前面全是精英培训,我们的胡策正在蒸蒸日上!

最后发现 T3 我之前做过,太幽默了。

线段树与区间加 by zdj

首先一次对于区间 \([x,y]\)\(z\) 可以转化成先对区间 \([1,y]\)\(z\),然后对区间 \([1,x-1]\)\(z\),所以我们现在只需要考虑一个前缀加法。并且线段树上一个区间的区间和可以用子树内懒标记表示出来,所以可以将区间和的贡献拆到懒标记上。

假设我们现在要给前缀 \([1,x]\)\(w\),则在线段树上找到最大的右端点为 \(x\) 的节点,将其父亲记作 \(u\),然后在 \(u\) 到根的链上把标记给推了。定义一条链的“左链”是所有这样的点 \(v\),满足 \(v\) 不在这条链上、\(v\) 是左儿子且 \(v\) 的父亲在这条链上上,类似的定义右链。

考虑进行一个树剖,每个点维护当前节点的懒标记 \(g\),以及从当前点到链底的左、右链要加上多少懒标记标记 \(f_l,f_r\)

对于一次区间加法,从上到下处理。每次相当于要将某条链的一个前缀的 \(g\) 转化成 \(f_l\)\(f_r\),将 \(f_l\) 区间加,并且对于接下来要推的链将懒标记显式地推下去。注意到 \(g\) 只会 \(O(n\log n)\) 次给某一个地方赋值,并且每次处理的是一段前缀,所以暴力转化就是对的。\(f_l,f_r\) 使用树状数组维护,时间复杂度 \(O(n\log ^2n)\)。好像跑得还挺快。

submission

字符串 by hfy

首先有个唐唐调和级数分块做法,剩下的等我学了 Runs 再补。

格雷码 by fsz

原题,感觉这个增量挺抽象的。

Round 14

第一眼看到 T1 的时候觉得很神秘,T2 更为厉害,T3 感觉是唐唐点分题。

先手玩了一下 T1 感受到了奇偶分层,然后写了一个发现喜提 40。于是尝试思考一下哪里错了发现啥都思考不出来,最后搭了个拍发现是写假了🤣,这时候 1h40min。

然后想了一下 T2 发现除了最基础的东西啥都不会,于是先给 T3 写了。到 11:00 左右写完交上去发现喜提 85,过了最后几个包没过 \(n\leq 10^4\),查了一下发现并查集合并顺序不对,数据和我都有点幽默。

然后开始坐牢 T2,把生成函数写出来之后发现我不会二元 GF 一点。最后发现 25 分暴力还是能要的,写了 20 之后发现最后 5 分不能要了。很喜欢一句话:5分谁写,于是直接开摆。

最后发现大家都不想写最后 5 分,于是有足足 13 个 220,但是有个精英培训老哥写出来了那 5 分获得 rk1,于是又变成精英培训互测了。

Round 15

刚开始感觉 T1 40 是简单的,但是后面一点不会。T2 好像是 NFLS 搬过的哪个题上树。原题我记得已经 *3000+ 了,太困难。T3 刚开始以为能求逆是 shaber 题,后来发现不能,于是又不会一点。

这时候感觉这场三个困难题,于是打算先写 T1。先写了个暴力观察了一下,发现最后的 DP 部分形式还是比较好的,一次求逆就能做了。但是预处理系数的部分好像是我大战 2h 失败的某个坐标系走路类似题,这下感觉要倒闭了。

硬着头皮做下去,然后发现其实还是好做的?分治 NTT 之后可以截断,复杂度就对了。写了一下,在 2.5h 的时候通过了这个题。

然后去思考了一下 T3,发现分治之后有一个 \(O(nm\log ^2n+qm\log n)\) 的做法,看上去能过挺多。正准备开始写的时候发现差分一下就可以做到 \(O(nm\log ^2n+qm)\) 了,于是写完之后卡卡常就过了。

这时候大概 1.5h,起码能给 T2 写个链了。回忆了一下原题怎么做,然后发现上树之后跨过 LCA 的区间可以记忆化解决,复杂度其实是对的,最后在 12:20 通过了。

本来以为能 AK 很多,但是周日的胡策显然没几个人打,于是混到了 rk1。

药水

考虑倒着做,维护一个 \(x\) 表示还没有处理的顾客的药水数量。当 \(x\leq 0\) 的时候就可以清空了。

假设能求出 \(f_i\) 表示一段长度为 \(i\) 的区间,只有最后 \(x\leq 0\),其余都满足 \(0<x\leq k\) 的概率。则将 \(f\) 截取前 \(m+1\) 位,然后分治 NTT/求逆就能求出最终的概率了。于是问题变成预处理 \(f\)

考虑直接去用分治 NTT 模拟这个坐标系走路的问题。大概是需要实现已知某个 \(x=p_l\) 坐标上 \([l,r]\) 区间的值,要将其转移到 \(p_r\),并且将超出上界的舍弃,小于下界的计入 \(f\)

首先在区间 \([l,r]\) 中找到不会超出的区间,一次卷积转移。然后将这些系数先转移到中点,然后中点再转移到右边。这两部分可以递归下去做。因为每个区间内需要递归下去的数量不会超过 \(6\) 倍区间长度,所以复杂度是 \(O(n\log ^2n)\) 的。

submission

字符游戏

考虑链上怎么做,大概是你需要预处理每个点往后最近的某个权值的点,以及这个区间的 SG 值是多少,并且预处理相关的倍增和前缀和。查询的时候只需要枚举第一次使用了什么,然后利用预处理的倍增计算 xor 和即可。

然后考虑放到树上怎么做,随便定一个根做这个过程,查询的时候问题在于跨过 LCA 的那段区间我们没有预处理过 SG 值,也不能预处理因为可能的点对数是 \(O(n^2)\) 的。但是我们发现对于每个询问,这样的跨过 LCA 的区间端点只可能是某个询问端点到 LCA 上某种值最靠近 LCA 的点,因此这样的区间只有 \(O(|\Sigma|^2)\) 个,通过合理记忆化可以将复杂度变为 \(O((n+q)|\Sigma|^2\log n+q|\Sigma|^3)\)

但是有个很大的问题是我这样都跑不进 1s,yxh 甚至写了个单次询问 \(O(|\Sigma|^3\log n)\) 的都随便 1s-,怎么会是呢?

submission

子集和

考虑将询问差分成询问一个前缀 \([1,x]\) 和一个后缀 \([y,n]\) 的答案之和。如果我们能找到一个点 \(p\) 满足 \(x\leq p<y\),并且处理出 \([1,p]\) 区间内去掉 \([1,x]\) 中一个点的 dp 值之和,\([p+1,n]\) 区间内去掉 \([y,n]\) 中一个点的 dp 值之和,则可以 \(O(m)\) 合并这两个 dp 状态来得到答案。

考虑去分治解决这个问题。对于分治区间 \([l,r]\),中点 \(mid\),处理所有 \(l\leq x<y\leq r\) 的询问。这时通过上层分治传下来一个 \(pre\)\(suf\) 表示 \([1,l-1]\) 去掉一个的信息和,以及 \([r+1,n]\) 去掉一个的信息和,以及 \(prew,sufw\) 表示 \([1,l-1]、[r+1,n]\) 不去掉一个的信息,然后通过分治对于每个 \(l\leq i\leq mid\) 求出区间 \([1,m]\) 去掉 \(i\) 的信息,\([mid+1,r]\) 也是一样,做前缀和之后就能回答所有满足 \(x\leq mid<y\) 的询问了。

对于其余询问分治到两边去做,并且容易同时更新 \(pre,suf,prew,sufw\),时间复杂度 \(O(n\log ^2m+qm)\)

submission

Round 16

最后一场三个题的胡策了!

T1 一开始连 20 分暴力都不会,仔细思考一下发现还需要编一个判定条件才能过 20,太毒瘤。T2 感觉和去年的那个题没啥区别啊?zyf 挺会出题,并且刚开场的时候数据还是错的。T3 感觉是典中典了。

于是先做 T1,发现需要上个高维前缀和才能过 40,精细实现一下才能过 50,太困难。做了大概 1h 才发现模数是 \(2^{32}\),然后才感觉可做一点。

这时候快 2h 了,出题人也改完数据了。先给 T1 写了个暴力,然后把 T3 写了,拉了份去年我 T2 的代码交了过了 50,然后改了改过了。

接着看 T1 的时候发现在 \(\geq 16\) 位的时候只能有一个自由位置,其余位置都是固定的,\(<16\) 位的可以状压 DP,于是就有一个 \(O(n^2\sqrt p\log p+qnk)\) 的做法和一个 \(O(qn\sqrt p\log p)\) 的做法,拼一拼暴力能有 80,于是先写了后面那个,在吃饭前拿到了这档分。

吃饭的时候想了想发现系数可以表示成三个比例固定的数列之和,于是都可以一次预处理出来,就是 \(O(n\sqrt p\log p+qk)\) 了,写了写卡了卡常在还有 8 分钟的时候过了。

因为这个究极神秘 T2 没人打胡策了,于是喜提 rk1。

数位 DP by shz

好像有个杂糅了 std 和我的根号分治的更优做法,等有空了补。

Round 17

开始之前通过合理排除得到一个是 cxy 的一个是达子的,但是看了两个题感觉两个题都是 cxy 的,最后发现有一个是 alpha 的!

先看了 T2 发现可以用欧拉数通项公式解决 \(k=2\) 的做法,但是可以喜提 5pts,说明这个题一半可能和欧拉数没啥关系一半可能是不可做题,于是先跳了看 T1。

看 T1 题目背景其实被戳到了,这个 trick 我第一次在 Codeforces Global Round 18 上碰到,场上看笋子很快就过了,但是我大战 1h 被打爆了。赛后得知这个长剖方法还是感觉很精妙的。之后再做了更多的关于选长链的题后,这个 trick 也就泯然众 trick 了。

然后推了一会儿会 \(O(n^4)\) 了,于是先写了一个,调了巨久,交了一发获得了 80 分。然后发现主要复杂度在一个卷积,写成纯卷积形式就过了。改成 \(16\) 轮一次取模甚至跑进 0.6s 了,有点幽默。

这时候才过了 2.5h,优势在我!然后看 T2,发现好像容斥一下分治 NTT 就做完了,于是先写了个暴力,然后调红温了,调到 12:45 才调出来暴力,贺了个 NTT 板子在结束前极限通过。

出榜一看有三个 AK 了,流泪。

posted @ 2024-11-23 11:53  275307894a  阅读(84)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end