🍕🏠🌋 当前时间是:

 

2025.4

4.2

[JOI open 2019 中暑]

4.3

T1

推一下 dp 发现是求 \([x^n]\prod\limits_{i}\dfrac{a_ix+b_i}{c_ix+d_i}\)

(下面一部分没写,不知道对不对)

对每个前缀求可以先考虑如何对 \([x^n]\prod\limits_{i}a_ix+b_i\) 求前缀点值:

类似转置地,把分治 fft 反过来,每次递归只保留 \([n-len,n]\) 的项。

带上分母就是初始乘上分母的逆多项式,每次向左递归时乘上分母在右边的乘积,还是只保留 \(O(r-l)\) 项。

T2

区间选一些不交合法括号序列的方案数。

比较朴素的 dp 看上去是没有前途的。考虑容斥:一个位置只从以它结尾的极短括号串转移,如果一段极长的合法括号序列包含 \(k\) 个极短括号序列,那么乘上 \(2^{k-1}\) 的系数。

可以发现极短的合法括号序列是不会交错的,所以能用树结构刻画出来。

每次询问需要找到询问区间两端的节点,然后往祖先跳,路上合并信息。信息是线性转移,值都是关于一个点儿子的前后缀,使用矩阵和倍增就可以维护了。

非常难写。

一种更容易的想法是建括号树,发现和上文说的树是等价的。

T3

有点神秘。

暴力的 dp 是离散化后从前往后扫值域,贪心维护每个三类区间结尾到现在的贡献。

可以发现每次更新也会更新右端点到 \(i\),所以 dp 值比当前最大值小超过 2 的状态都可以扔掉。这已经可以过了。

再把能被偏序的状态扔掉好像就不会卡了。

不是很懂这题啊。

4.4

谴责题意造挂(机房三个人打有三份题意,一份不清,一份错误,一份正确),有点搞笑了

4.5

清明节怎么三天假期啊?无敌了,引诱启动启动启动

4.6

USACO 2025 Feb P

T1

手玩一下发现长度大于 6 的区间奇数权值是最大值,偶数是次大值。

大的区间二分算贡献可以 \(O(n\log n)\)

小的区间暴力做,需要注意不要太暴力,不然过不去。

长度为 6 的区间可以发现答案一定从若干个 pair 的 min 中取 max,直接打表打出来判断。

T2

T3

按照 \(a+b\) 排序,发现相当于选一个长度大于等于 \(k\) 的前缀,贡献是后面的 \(a_i\) 和前去前面前 \(k\) 小的 \(b_i\)

猜一下决策单调性,打表发现是对的,用主席树计算贡献,可以 2log。

决策单调性换成 SMAWK 应该可以一个 log。

4.7

2nd ucup stage 22

B

考虑如何判断有无解。

使用 bitset,对每种颜色单独做,拿全局的位置异或这种颜色的位置,然后枚举这种颜色的位置,贡献到答案的 bitset(均摊下来会进行 \(n\) 次修改)

要求找到编号最小的(相对误差不超过 0.5),可以套个倍增。

复杂度是 \(O(n\log n+\dfrac{n^2}{\omega})\)

神秘啊。

C

直接 \(O(M\sqrt{M})\) 爆过去了。

按度数根号分成大小点,把询问离线做。

路径上存在大点的贡献是容易的,直接以大点为源点跑边数不超过 3 的 SSSP,可以 dp 实现。

否则路径上全是小点:对于询问 \((x,y)\),离线处理到 \(x\) 时枚举 \(x\) 的出边 \(p\),如果 \(p\) 是小点,枚举 \(p\) 的出边 \(v\),给 \(v\) 打上 \((x,p),(p,v)\) 边权和的 tag,然后对每个询问 \(y\),枚举 \(y\) 的出边,算 tag 加上边权的贡献。

正解很牛,需要用到平面图的性质,是线性的,等我学习一下。

E

F

点权互不相同的树上邻域 mex。

有 inf 种 2log 做法,ywr 写的常数很小,一发直接过了,拜谢!

由于点权不同,只需要二分判断小于等于 \(mid\) 的点距 \(x\) 最远的距离是否大于 \(k\)

相当于询问一个前缀中的点距 \(x\) 的最远距离。

这大概是经典 trick 吧,最远点一定从直径两端点取。

使用 \(O(1)\) lca 做到 1log。

K

感觉关键是考虑对一个序列从后往前做。

以询问的右端点为下标,存答案建主席树好像就做完了。

ANIG 写了根号直接跑过去了,拜谢!

4.8

T1

这我咋会啊。

分成若干段,每段内球的数量和段长相同,容易发现分法唯一。

由于要求操作次数最少,所以不能有向左和向右的球路径相交。

所以发现一段内分成了前后两部分,只有中间一个位置的球的方向不确定。

对这个 dp 就行了,需要用一些东西均摊复杂度,我的写法有点稠。

复杂度是平方的。

EK 费用流跑不了 300 个点的满二分图????

补充一下 primal-dual:

T2

赛时写了倍增加了点手法跑路。

考虑远处的一条竖线,此时所有直线不会再出现交点,再找出纵坐标每个分界点,由于没有交点了,所以在更远一小点的地方再询问一遍就能得到每个直线上的两个点了。

这是 \(O(n\log V)\) 次询问。

把问题抽象一下就是现在有分 \(n\) 段的凸一次函数,可以询问每个位置的斜率,求所有分段点的位置。

可以问出两边的直线斜率,再求它们的交点,以交点的横坐标为分割线递归下去做,\(O(n)\) 次就能问出来了。

T3

考虑逐位确定,变成询问前缀是某个串的拼接出来的串有多少个。

分两种贡献:一种是当前还匹配在 \(S\) 的,另一种是已经开始拼接 \(T\) 的子串。

第一种很好处理,第二种可以维护匹配上 \(T\) 的后缀在 \(T\) 的 SAM 上的节点。

获得了能通过除最后一档的做法。

考虑第二种的后缀的左端点是当前维护的答案的一个区间,可以对应到 \(T\) 的 parent 树上的一条链。

剩下的信息可以树上差分预处理了。

4.9

CF1153F

对于实数随机,有些问题需要维护概率的分布,但这个题可以直接算答案。

一个结论是 \([0,1]\) 上随 \(n\) 个数,排序后第 \(i\) 个数的期望是 \(\dfrac{i}{n+1}\)

贡献拆一下 dp 即可。

CF1097F

值域较小,如果没有 \(\gcd\) 卷积可以 bitset 做到 \((\dfrac{qv}{\omega})\)

处理 \(\gcd\) 卷积可以对集合做 \(\text{FWT}\),得到 \(A_i\sum\limits_{j\mid i}a_j\),其中 \(a_j\) 表示 \(j\) 的出现次数。

查询预处理出莫反的系数复杂度也可以做到 \(\dfrac{v}{\omega}\)

4.10

T1

首先有一个脑筋急转弯的观察:只有和 1 号人同色的人才可能使用第一种走法,并且如果使用第一种走法,一定只会直接到达。

后面部分建图:主要是把四种方向各扫一遍,每个点连离它最近的不同色点,需要前缀和优化建图,注意排序使用双关键字保证严格的顺序。

跑 dij,复杂度 1log。

T2

没写完/fn

T3

\(O(n^4)\) 过 2000,\(O(n^3)\) 过 5000,赛后被 rqoi031 哥哥 hack 穿了,不知道这题在干什么。 /kel

不会做啊,也不知道为啥我写的爆跳是 \(O(n^3)\) 而不是 \(O(n^2)\) 的,等我研究研究。

4.11

T1

先扫右端点满足限制的,用单调栈和线段树维护,再 reverse 做一边。

对每种值再做一次,减去左右端点相同的贡献。

T2

网格图最段路,考虑分治。

贡献是二维数点。

T3

是咋克在 NOIWC 讲的东西。

4.12

P7563 [JOISC 2021] 最悪の記者 4

P10786 [NOI2024] 百万富翁

由于交互库自适应,如果只能询问一次,那么必须询问出两两的偏序关系才可以。

现在允许询问多次,一个想法是每次两个两个一组询问,这样需要 \(\dfrac{n}{2}+\dfrac{n}{4}+\dfrac{n}{8}+\cdots\leq n\) 对询问,需要 \(\log_2 n\) 次。

次数有点多,考虑类似地,每次询问均分成若干组,然后递归下去。

写个很暴力的 dp 加上剪枝跑一段时间可以跑出来 1099944。

感觉这个题不太有道理qwq。

4.14

3rd. ucup stage 7

A

B

细节题。

注意把想到的 case 都判上,还要注意 corner case 不要写挂。

E

F

使用哈希可以 \(O(1)\) 判断斐波那契数。

考虑斐波那契数列的性质。

如果 \(a_i+a_j=f_n\)\(a_i\ge a_j\),那么对于 \(a_i\) 来说,\(a_j\) 的种类数一定只有 \(O(1)\) 个,因为斐波那契数列是指数增长的。

现在就是要快速定位出来一个数最近的斐波那契数,然后前后找一些。

由于斐波那契数的对数几乎成线性增长,所以可以把斜率打表出来,根据输入的数的位数确定。

G

考虑二分答案转化成 01 矩阵,发现要求一行全是 1。

所以答案就是每行最小值的最大值。

K

首先打表考虑一些图的形态:

  • 如果是一条链,长度不能超过 \(O(\log n)\) 级别的一个阈值。

  • 不能有环。

所以只有输入的图是一棵树。更进一步,每个点度数不超过 3,所以可以看做二叉树。

如果确定了根节点(1 号),那么可以根据深度(不超过 32)判断是否合法,并且能 dp 出最小值(类似线段树的编号)。

换根 dp 即可,一个代码上的技巧是记搜实现换根 dp,状态数是 \(O(n)\) 的,复杂度多乘一个度数,但在这个问题下是常数。

L

数据随机。

区间长度充分长的时候区间平均值期望几乎是 \(\dfrac{n}{2}\),所以合法的区间长度在 \(\dfrac{n}{2}\) 附近还有较小的一些区间。

设个阈值暴力找一下即可。

4.15

T1

大致想法是每次询问通过设置不同权值排除一些堆,递归做下去,直到可以给每堆赋一个不同的权值。

设大小为 \(i\) 的堆有 \(c_i\) 个,可以得到一个次数上界是 \(\lceil\max \log_i c_i\rceil+1\)

实际写的时候会发现某些 case 会比最优答案大 1,这是因为有些情况可以通过调整前面的权值使最后一轮只剩下一个数,就不比多问一次。

这似乎不太好处理。

但是 dls 讲一个正确的贪心是按照堆大小 \(a_i\) 从小往大,每次选 \([0,a_i]\) 中使用次数最少的权值。

还不太懂道理是什么。

T2

4.16

T2

每个图上的节点涉及到的 trie 上的点建虚树。

相当于要在这棵树上转移,权值是 LCA 深度。

树上每个点拆成入点和出点,入点可以往上走,还可以走到自己兄弟的出点。

使用前缀和优化建图。

复杂度 1log。

T3

想不到流,唉唉唉

是构造二分图最小点覆盖方案的板子。

先求最大匹配,考虑非匹配点,要求和它连的点(一定是匹配点)必须选,然后递归地对选上的匹配点的邻居匹配点做。

4.17

T1

为啥底力这么差

考虑容斥,相当于问正方形左下顶点在一个矩形内,右上顶点在一个矩形内的方案数。

考虑枚举正方形边长,这个东西是分 \(O(1)\) 段的,每段是关于其边长的多项式函数(只有 \(O(1)\) 次),暴力算几项插值出来。

又观察到容斥后的 bounding-box 内部有点的话容斥系数会抵消,所以只需要考虑内部没有点的矩形。

可以证明这样的矩形有 \(O(k^2)\) 个,找出来做就行了。

感觉很复杂。

4.18

T1

扫右端点,对每个数的支配区间做一些操作,维护最小次小值个数。

T2

考虑如何求单点为端点的答案:枚举和它同色的点,贡献拆到点上边上和 lca 处,系数可以 dsu on tree 预处理出来。

处理出来每个点的答案建虚树换根 dp 即可,换根 dp 比较难写。

T3

LGV 引理,我还不会做。

4.19

3rd Universal Cup. Stage 11

签完到跟榜误开科技题,拼尽全力无法战胜。

H

感受一下就是按照一个权值排序,能写出来 \(n\) 个方程然后把期望解出来。

\(f_n\) 似乎会出现分母是 0 的 case,解 \(f_1\) 就不会爆,感觉可能是 \(f_1\) 没法卡?

upd:

还是太不懂期望了/kel

确定顺序后期望其实是好算的,

\(f_i\) 表示走完 \(i\) 个点的期望步数,那么到第 \(i\) 个位置期望 \(\dfrac{b_i}{a_i}\) 次过关,所以 \(f_i=(f_{i-1}+t_i)\dfrac{b_i}{a_i}\)

然后排序顺序也是自然的了。

J

困难的啊。

先来解决 [PA 2024] Grupa permutacji

首先要观察到一个结论是:复合出的最终序列中,数 \(i\) 在它可能出现的所有位置的方案数相同。

比如考虑数 1,可以通过建图来说明:

\(n\) 个点,第 \(i\) 个点表示 1 的下标为 \(i\)
对于输入的 \(m\) 种排列,把 \(i\)\(a_{t,i}\) 连双向边(是因为复合逆排列相当于复合 \(\text{lcm}-1\) 次原排列),边权为 \(a_t\)
那么数 1 从下标 1 回到下标 1 的方案数就是从 1 号点出发,任意路径走回 1 号点,把路径上的边权依次复合起来得到的本质不同排列数量。
取一棵以 1 号点为根的生成树,对于数 1 最终在下标 \(k\) 的方案数,可以考虑:每个从 1 号点回到 1 号点的圈都可以再走一段 1 到 \(k\) 的树边,反过来也是可以对应的。

O

感觉是脑筋急转弯。

注意到 check 加上一条边不合法的话可以把两端点合并成同色点。

这样只会合并不超过 \(2n\) 次,选个模数可撤销背包即可。

复杂度 \(O(m\log n+n^2)\)

4.21

The 1st Universal Cup. Stage 16: Gomel

C

这个题卡空间,可以差分后用平衡树。

也可以把动开线段树压缩一下(相当于建叶子节点的虚树)。

F

考虑这个问题二维怎么做:拿 \((255,255)\) 和目标点连线延长,和正方形一个边相交,从原点走到交点,再沿延长线走到目标点即可。

可以发现这个很容易推广到三维。

H

把一个点和它能匹配的点连边,一个大小为 \(k\) 的连通块匹配数不超过 \(\dfrac{k}{2}\),事实上这个界是能取到的。

每个点只保留四个方向上离它最近的点连边,对每个连通块取一棵生成树,找到一个不超过三度的点为根,这样每个点就有不超过三个儿子。

可以归纳地构造,每个子树内最多有一个不匹配的点,对每个点的儿子数讨论进行匹配。

可以发现能取到 \(\dfrac{k}{2}\) 的界。

4.23

The 3rd Universal Cup. Stage 24: Poland

C

L

要求三个人的 LCP 相同。

先按照 \(a^{\infty}\) 排序,求出相邻两个的 LCP,那么两个串的 LCP 就是区间 \(\min\)

排序可以二分哈希,好像也可以 Z-函数少一个 \(\log\)

4.24

A

数据范围很诡异。

考虑以炸弹的威力为下标用线段树维护答案。

可以发现 \(O(k\text{polylog})\) 的 pushup 是可以接受的。

每次 pushup 要做的是 \((\min,+)\) 卷积,而前 \(k\) 小之和是凸的,决策单调性优化即可。

4.25

A

考虑到 \(\varphi(ab)=\dfrac{\varphi(a)\varphi(b)\gcd(a,b)}{\varphi(\gcd(a,b))}\)

对于 \(a,b\),枚举它们的公约数 \(d\),取 \(\max(\dfrac{\varphi(a)\varphi(b)d}{\varphi(d)})\),不会改变答案。

再找一下支配对,发现只有 \(O(n\log n)\) 个,二维数点即可。

B

发现局面只和 \(a_i\) 的奇偶性有关。

走到奇数的 \(a_i\) 就爆了,由此可以得到一个线性的 dp。

试一试发现 polylog 好像不太行,考虑分块。

如果 \(k\) 大于 \(\sqrt{n}\) 可以直接爆跳。

每一个整块处理出来从后往前最后一个 0 离块的右端点的距离能得到的输出。

查询从后往前跳做到根号。

每次修改操作翻转区间信息即可。

The 2024 ICPC World Finals Astana

回头再写吧,大模拟写了一场最后四个小时过掉了,剩下的难题都是 ANIG 写的。

posted @ 2025-04-02 14:42  zzafanti  阅读(88)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end