记录(4)

彩绘

\(f(i,j)\) 表示 \(i+1\) 个桶,第 \(j\) 个桶的系数。\((0\le j\le i)\)

则有 \(f(i,j)=\frac{j-1}{i}f(i-1,j-1)+\frac{i-j-1}{i}f(i-1,j)\)\(1\le j<i\)

边界 \(f(0,0)=1\)

\(j=0\)\(i\),发现上面的递推同样成立,只要定义 \(f(i,-1)=0\)

考虑 \((i,j)\)\((0,0)\) 的转移路径,向下/向左,走一步会附带一个系数,系数是定的,只需要统计路径数。

一般难度的推式子题

双射:欧拉回路,向下 ( 向上 )

dyck 路:
记住这个形式:

\(d\) 是上下两条红线间距。注意要转成不能碰的线,\(d\) 要变成 \(d+2\)

\(\sum_k C(2(n-1),a+kd)-\sum_k C(2(n-1),b+kd)\)

其中 \(a,b\) 是和起点、终点坐标差有关的常数。

Chords

圆上的弦 -> 断环为链,变成区间

枚举连通块左右端点 \(l,r\),不能有跨过内外的边,计算区间在内部连边使 \(l,r\) 联通的方案数,容斥,用总的方案数减掉枚举一个 \(p\),实际上只联通到 \(p\) 的方案数。

Sightseeing Plan

TODO

Random Kth Max

TODO:感受一下用 min-max容斥避免积分的做法

\(\sum_t Pr[X>t]dt = E[X]\)

\(n^4->n^3\)\(t\) 是真正的值,而不是 \([0,1]\) \(f_i(t)=k_it+b_i\),是定的,左端点乘右端点除。

Guess the Number

做法1
\(X\) 后面补 \(0\),扩成 \(10^7\sim 10^8\) 的数。
二分,判断 \(X\ge Y\):构造最小的 \(t\)\(tY\ge 10^{16}\),看 \(t*X\) 的首位是不是 \(1\)

做法2
对于 \(x=1...\sqrt n\)\(\left\lceil\frac nx\right\rceil\) 互不相同:\(\frac nx-\frac n{x+1}> 1\)

知道结果是 \(s\) 反解 \(x=\frac{n-1}{s-1}\)(最大的 \(x\))整除分块的结论 必须背过

Yes or No

做法1

在折线图上看非常显然。

做法2

策略显然是猜剩余更多的那个数。假设两种分别剩余 \(N,M\),那么猜 \(\max(N,M)\),如果猜对了,说明 \(\max(N,M)\) 一定减少 \(1\)(除非 \(N=M\));如果猜错了,说明 \(\max(N,M)\) 不变。那么猜对的次数显然是 \(\max(N,M)\)。当 \(N=M\),有 \(1/2\) 的概率猜对了但是 \(\max(N,M)\) 不变,这里少算了 \(1\),所以做一个修正,枚举 \(N=M=k\) 补上经过 \(N=M=k\) 的概率。

Forbidden Tournament

引理1

将所有强连通分量按顺序排成一排,则只有最后一个强连通分量大小可能 \(\ge 3\)

剥去前面的孤点,不妨假设整张图强连通。

引理2

\(1\) 的入点和出点分别构成一条链。

对于入点:如果有 \(\ge 3\) 的强连通分量,则说明一定有三元环,进而会出现不合法子图。

对于出点:找出最后一个强连通分量 \(S\)。因为假设整张图强连通,因此 \(S\) 内必然会连到第一条链上的一个 \(x\)。同时至少有一条从 \(x\) 连向 \(S\) 的边,因为如果全都连到 \(x\)\(S\) 中的一个三元环加上 \(x\) 就不合法。若 \(a\to x,x\to b\),不能有 \(b\to a\),否则 \(1,a,b,x\) 违反条件。因此两部分之间的边只能由一边指向另一边,就与 \(S\) 强连通矛盾。

引理3

把两条链拉到上下两行,分别叫做 \(X_1,...,X_a=1\)\(1=Y_1,...,Y_b\)

对于 \(X_k\),一定存在 \(Y\) 的一段前缀 \(X_k\) 指向 \(Y_*\),一段后缀 \(Y_*\) 指向 \(X_k\)。取出第一个 \(X_k\to Y_i\)\(Y_{i+1}\to X_k\),那么必须是 \(X_k\to Y_{i+1}...\),同时因为第一个,所以 \(Y_1...\to X_k\)。对于 \(Y_k\) 同理。

引理4
由上两条性质,对于邻接矩阵,\(X_i\to Y_j\) 叫做 \(1\),那么行连续 \(1\) 单调,列连续 \(0\) 单调。因为如果行不单调,说明存在
...11..
...10..
\(Y_j\) 先 1 后 0 就矛盾了。对于列,同理。

Spanning Trees of Interval Graph (线性代数)

设总点数 \(S=\sum C_{ij}\)。根据矩阵树定理,答案为 \(D-A\) 去掉第一行第一列后的行列式。假设就是行列式好了。

\(\det D-A\)
\(=\det D\det I-D^{-1}A\) --------------\(\det AB=\det A\det B\)

考虑对 \(D^{-1}A\) 做低秩分解,假设 \(D^{-1}A\) 可以分解为 \(S\times N\)\(N\times S\) 大小的 \(u,v\) 相乘,\(N\) 比较小。
则:
\(=\det I-uv\)
\(=\det I-vu\) ----------------矩阵行列式引理:\(\det I_n-uv=\det I_m-vu\)

于是我们只需要计算一个 \(N\times N\) 矩阵的行列式即可。

那么问题来了,如何分解 \(D^{-1}A\)?先分解 \(A=uv\),则 \(D^{-1}A=(D^{-1}u)v\)

点减边。拆成 \(2N-1\) 列,\(1,2,...,12,23,...\)。计算点积就等于两个区间是否有交。注意 \(u\) 是点减边,\(v\) 是点加边。

去掉第一行第一列,相当于删掉第一个点,但是度数保持不动。

图片

Deque Sort

\(n\) 轮以内可以排序:考虑最长的 \(...,n-1,n\) 的后缀,每次操作后最末一个必定归位。

进行若干轮后的形态一定都形如:一段递减段,中间乱序,一段递增段。不妨假设 \(a_n\ne n\)。一次操作会选择递减段的开头,中间一些数(因为 \(a_n\ne n\),不会选择递增段)。操作后递增段变到递减段,选出的数前面刚好拼上递减段作为新的递增段。每次暴力找到前缀最大值,并及时排除 \(a_n=n\),那么取出的数总和是线性的。使用平衡树维护(不用split)。

Nezzar and Chocolate Bars

先考虑 \(n=1\)。计算 \(m\) 轮仍然没有结束,即存在一个间隔 \(>d\) 的概率,对 \(m\ge 0\) 求和。容斥,\(\sum_{k=1}^{\infty}(\frac{l-kd}{l})^{m}C(m+1,k)(-1)^{k-1}\)

(为什么是 \((\frac{l-kd}{l})^{m}\)?这里有一个双射,但是只有双射还不行,要不改变概率密度,因为不能有伸缩,而这里只有平移。)

Yosupo's Algorithm

找出所有支配对。分治,把 \(y\) 的条件去掉。结论:对于一定会选红/蓝最大值。假设没有选最大值,那么考虑如果红最大在区间内,或着蓝最大在区间内,可以替换为对应的最大值。否则同时替换为两个最大值。

注意分治是用来找支配对的,而不是用来回答询问的。

找到所有支配对,再做一个二维数点。

Permutation Recovery

考虑知道的所有信息。\(i\to p_i\) 连边后,一条边就会对应一条反向边,正反匹配起来,变成一条无向边。这张图就是所有的信息了。

图上每个点的度数为 \(2k\)。先给边定向,使得每个点入度等于出度等于 \(k\)。拆点,求一个 \(k-\)正则图的 \(k\) 组匹配即可。

如何定向:
方法1
让一条边,要么去匹配 \(u\) 的入度,要么去匹配 \(v\) 的入度,左边是边,右边是点的每一个度数,求一个完美匹配。

方法2
求一条欧拉回路,按照经过的方向来定向。

Accommodation Plan

多次询问求一个点的 \(k\) 邻域大小,可离线。要求单 \(\log\)

Where is the legend?

差分,合并两个相邻的 \(x x\)

除掉 \(2\) 之后分组,每一组单独做。这样就可以假设每个数都是 \(2^k\)。倍增求一个 \(f_{l,k}\) 表示能不能把 \([l,r]\) 合并成 \(2^k\)

Królewski bal [B]

形如求一个图的最大匹配,要么贪心匹配,要么就只能考虑 Hall 定理或最小点覆盖/最大独立集。

选取最大独立集做分析。那么选一个黑点,就不能选同一行同一列的白点了。相当于选出行的集合 \(R\) 列的集合 \(C\)\(R,C\) 里面的只能选白点,\(U\R,U\C\) 里只能选黑点。

图片

左上方区域内的白点+右下区域内的黑点。

这里行列不独立,所以要拆一拆。\(R\) 的白点数 + \(C\) 的黑点数 - \(|R||C|\)

假设确定 \(R\),那么对于每列是独立的,等于 \(\sum\max(c_j-|R|,0)\)

假设确定 \(|R|\),而不是 \(R\),那么一定选择排序后 \(r_1,...,r_{|R|}\)

修改 \(r\) +1-1,影响是一段后缀;修改 \(c\) +1-1,影响只有 \(|R|=c_j\)

6月2日模拟赛

A

B

做法1

一个点是不是谷,实际上等于有没有向前的连边。

二进制分组,求出每个点的两个邻居的异或。

分别问一次 \(ST\)\(TS\)\(ST,TS\)取反,就能知道一个点连到 \(S,T\) 的边分别有几条。

还需要求出任意一条边。随便问一个排列,找到第一个不是第一个到的人,将这个前缀翻转,同理就可以问出另一条边。需要额外一次询问。

优化方法:改用三进制;直接枚举一条边 \(1x\) 解出来看对不对,省下最后一次询问;问出大致形态再随机。

做法2

考虑先求出一个极大的独立集 \(S\),那么问一个 \(S\) 中的点结果是有没有连到之前的 \(T\),并且是两两独立的,那么可以对 \(S\) 整体二分,求出连到的靠前的边。再反过来求出靠后的边。现在还剩 \(T\) 中的边,先问一次将 \(T\) 再划分为两个独立集,再进行上面的过程,求出匹配边。

还需要求出一个独立集,维护独立集里的点 \(S\) 和候选点 \(T\)。其他一定不在独立集的点可以放在最后,不影响。随机打乱 \(T\)。问 \(ST,TS\),如果 \(ST\) 有向前的边但是 \(TS\) 没有,说明连到了 \(S\),删掉这个点;如果 \(ST\) 没有,说明这个点是一个谷,且没有连到 \(S\),那么加入 \(S\);如果都有就无法确定,留在 \(T\)。这样经过 \(10+\) 轮就能找出一个独立集。

也可以随机问 \(TS\),把谷加进去,但是后期很难收敛,实测 \(30+\) 次也无法完全收敛。

随机化,不仅要考虑单次减少的比例,还要考虑收敛的速度。

C

timeismoney

一个离散的点集内 \(xy\) 最小的点一定是下凸壳上的某个点。

证明:考虑取两个点,将两个点连线上的所有的点都加入凸包,不影响答案,因为一段线段最优解一定取在某个端点(考虑 \(xy=t\) 第一次交这个线段)。因为凸包内 \(x\times y\) 最小的点一定在凸包边界上,所以删掉新扩充的点之后一定也取在一个原来的点。

或者说,这个点一定在下凸壳上,同时,如果在一条边上,不如调整到某个端点。于是一定在点集里,同时一定在下凸壳上。

将一条边视为一个向量,找到解集的下凸壳。

考虑分治找出 \(AB\) 之间的点。考虑 \(S_{\triangle ABC}\) 最大的点 \(C\) 一定在凸包内,将 \(S_{\triangle ABC}\) 化成叉积式,一定等于某个 \(Px+Qy\)。即点积 \((P,Q)\)。将每条边点积 \((P,Q)\),作为边权求一个 MST,同时记录原向量 \(C\),继续分治 \(AC,BC\)

求出 \((1,0),(0,1)\) 两个边界点 \(A,B\),然后执行 \(AB\)

6.4模拟赛

A

引理:若分别存在 \(r\) 红边、\(b\) 条蓝边、\(g\) 条绿边的生成树,\(r+b+g=n-1\),则存在三种颜色的边同时有 \(r,g,b\) 条的生成树。

维护三个生成树 \(T_r,T_g,T_b\),每次取出两个生成树,比如 \(T_r,T_g\),如果 \(T_r(b>),T_g(b<)\),那么可以在不改变 \(T_r(r=),T_b(b=)\) 的情况下调整 \(T_r,T_g\)。最终 \(T_r=T_g=T_b\)

C

根号分治,对 \(t\le B\),直接暴力,分块平衡一下。

\(t>B\),先让每个点跳 \(B\) 层,删掉子树深度 \(<B\) 的点,剩下的叶子个数最多有 \(n/B\) 个。则可以分成 \(n/B\) 条链。一个询问是 \(n/B\) 次查询一个子树内深度 \(\le d\),编号 \(\le k\) 的点数。对编号再分块。散块暴力,整块长剖

Master of Modular Arithmetic

如何简化思路:如果之前是倒着想的,把思路正着重新理一遍。发现对称性(01对陈)

充要条件:初始想等或者 \(b_i\) 不全相同,且 \(a_i\ne 0\)。构造时只要保证了这一条件,就是一定有解的。

如何把 \(a_i\) 变成 \(b_i\)
思路1 \(a_i\to ka_i,\%(ka_i-b_i)\) 问题:\(a_1\) 做着做着变成 \(0\) 了。
思路2 \(a_i\%(a_i-1),*b_i\) 问题:\(a_i=2\)\(a_1\) 结果巨大。特判太过麻烦,果断放弃。
思路3 \(a_i*(b_ia_i^{-1}\%M),\%M\)。问题:\(b_i=2a_i\)。解决措施:同时维护 \(a_1,a_2\)

如何把 \(1 x\) 变成 \(y 1\)
思路1 \(1,x\to 1,kx\to y,kx\%y\),选择 \(k\) 使得 \(kx\%y=1\)。如果 \(x,y\) 不互质,就利用一个大质数做中间值。
思路2 可以把 \(x,y\) 变成较小的数(\(x\%m,y*m\)\(x*m,y\%m\))然后暴搜。

Chocological

首先 01 是对称的,不妨假设 1 的个数不超过 \(n\)

同一列内可以任意移动,只关心目标状态每一列的人数,哪一行不区分。

倒着做。

希望得到尽量长的 \(1\),但同时需要维护前后缀的条件。贪心先让第一行从第二行中得到尽量多的 \(1\),根据是否有无法移动的 \(1\) 进行分类讨论。

Weird Chessboard

\(A_{i,j}\) 表示选没选,做一遍二维前缀和。
根据 \(A\) 做完二维前缀和还是 \(A\),列出方程 \(A_{i,j}=A_{i-1,j-1}+A_{i-1,j}+A_{i,j-1}\),即 \(A_{i,j}+A_{i,j+1}+A_{i+1,j}=0\)

性质:上半三角一定全是 \(0\),对角线可以全填 \(1\)。只要确定 \(A_{n,j}\) 就能唯一确定整个矩阵。

目标要让 \(1\) 的密度达到 \(60\%\)

\(A_{n,j}\) 随机的情况下约为 \(50\%\)。代入 \(110110110...\),此时密度基本达到了 \(0.6\)。进一步发现这个矩阵里有很大的纯白三角形,要是不小心切进去就不好了。因此生成 6000*6000 的矩阵,再从中选择最大的子矩阵。

Sequence Operation 1

做法1

打表发现一个长度为 \(14\) 的串一定可以用 \(11\) 步操作消除.由此有一个 \((11/14)n\) 的做法.

预处理长度较短的串,dp 出一个最优的将整个串分成较短的短的分段方式.事实证明根本无法卡掉.原因在于经过微小的扰动能产生很大的变化.

做法2

可以证明正确性的做法.

先把一个后缀 \(S\) 留在手里,考虑在其后追加一个长度为 \(7\) 的串 \(x\).我们希望 \(S+x\) 可以通过 \(5\) 次操作变为 \(y+S'\) 其中 \(y=22222\). 这里 \(S'\) 是一个可能包含很多状态的集合,同理 \(S\) 也是一个状态的集合.如果经此操作始终满足 \(S'\ne \emptyset\) 那么合法.

可以看作一个自动机,\(S\) 通过 \(x\) 的转移边变成 \(S'\)。从初始状态 \(S=U\) 开始迭代。如果永远迭代不完就证实一定有解。

Make SYSU Great Again IV

直观化:将区间 DP 的结构看作是凸多边形上的三角剖分。点有点权,代价是三角形定点点权乘积之和。

性质:最优解中一定选择最小-次小、最小-次次小的边。假设较小的三个分别是 \(a,b,c\) 较大的三个分别是 \(x,y,z\),若保证选择次小-次次小,还需满足 \(\frac 1a+\frac 1x<\frac 1b+\frac 1c\)。这个条件其实比较容易满足,可以忽略。

不妨取 \(a,a+1,a+2\)\(a\) 是偶数时所有三角形都是偶数,不妨让 \(a\) 取一个奇数。此时解得 \(x,y,z\) 的下界,并从中减掉,可以解出 \(x,y,z\)。从小到大枚举 \(a\)

Yesterday Once More

Graph Problem 2026

MX

渡船

新居规划

posted @ 2026-07-24 10:54  Network_Error  阅读(4)  评论(0)    收藏  举报