1 月记录

下雨

f(x) 为满足 ai!=x 的最小 ai,求最小的满足 f(x)>nx

要使得 ai!>nai=ti×i 最小,打表发现 f(x) 的前缀 max 是连续的,于是我们只用求 f(x)=n+1 的最小 x

考虑一个阶乘进制的东西,j<ij×j!=i!,每个数有唯一分解 x=ti×i!,tii

考虑贪心,先手动填满一个前缀,然后在最高位上取,然后删掉多余的,由于多余的和 i,于是只用删掉一个阶乘。

i 最大是 O(n13) 的,直接预处理二分即可。

沙尘暴(sandstorm)

当我们不会修改 h 时,类似带权中位数,一定可以取到一个现有的 h

于是路径是几个段,每一个段里钦定一个没有修改的 h

预处理 fi,j 表示 i 是段的根,走到 j 的最小代价。

然后我们考虑通过 fi,j1+fk,j2 处理出关键点之间两两最短路。

那么答案可以由 fs,u+gu,v+ft,v 得出,也可以优化。

宇宙射线

高级奇妙题。

感性理解,每次操作,图像的最高点和最低点极差固定减少一。

也可以看 sol 的妙妙证明。

考虑比较暴力的做法,枚举上下界,枚举终点算。

这样没有前途,考虑枚举极差 m,固定上下界不经过 y=x+m+1,y=x1,然后起点从 y=x 任取,终点从 y=x+n 任取,不过好像还要算起点在 y=x1,终点在 y=x+n1 的方案。

同时做反射容斥,每次是 O(nm) 的,预处理前缀和,可以做到 O(nlnn)

后面不会了。

G(m)=x+y=0>(x+y=n)线x+1<y<x+m+1(x+yx)(0,0)>(n,m),x+l<y<x+r,k(n+mnk(rl))(n+mnk(rl)+r)

万斯(vance)

随机化或者搜索即可。

梨仙人掌(game)

简单策略题。

夜晚坏人一定随机刀一个好人,而白天其实有固定策略:所有人决定随机淘汰一个人。证明如下:

由于坏人知道所有人的阵营,而好人无法获得任何信息,因此白天的任何信息好人都无法判断真伪。因此好人一定希望随机淘汰一个人。由于好人较多,如果坏人不同意上述规则而选择绑票投某个好人,则好人可以直接把不同意规则的人票出去。因此坏人也不得不同意该规则。

龙神木仙人掌(matrix)

好家伙,知道了 A1 就是对 A 消元的矩阵乘起来,我要算消元的影响只需要用到 A1 的值!!!

考虑将减法变成乘法,构造:

A=(A1,1u1v1A1,nu1vn0An,1unv1An,nunvn0001)

这样我们对他求逆元的左上角一定是 A1

它其实等于:

A=(10u101un001)×(A1,1A1,nu1An,1An,nunv1vn1)×(100010v1vn1)

左右都是初等行列表换,是好做的。

我们已经知道之前 A1,我们用他计算对 ui,vj 的影响,然后模拟对 vj,ui 的消元得到中间的逆元。

由转置原理,都是好做的。

未知(unknown)

处理出每个点的取值范围,那么要做的就是每个值连向交的满足取值范围的点,求二分图匹配。

考虑优化建图,可以分块。

散块暴力,整块只有 O(n) 种不同的连边方式,扫描线即可处理,时间复杂度 O(n2)

也可以主席树优化。

对点扫,加点删点都可以在主席树上处理,每次修改都新建点即可,连边就是向区间连边,时间复杂度 O((nlogn)1.5)

观光缆车(telpher)

对称一下,可以发现是杨辉三角斜线求和,发现就是斐波那契数列。

然后 sol 的做法就是硬找规律,不好。

考虑列和可以转化为单点,这样矩形可以转化为两条横线,那么我们就是计算这两条横线的斐波那契,发现一条横线是单调的,所以做两次前缀和即可,注意边界的特殊情况。

P5979 [PA2014] Druzyny

简单题,直接分治。

分别对固定左为 max,右为 max 讨论,硬做就好了。

[ABC386G] Many MST

最小生成树的权值和,可以转化为每种权值有多少个比他大的最小生成树边权求和,那么就是权值 w 的连通块个数了。

统计一个子集作为连通块的方案数,其实点数相同方案数相同,转成个数做,就是求 i 个点是连通块的方案数,然后他连向其他点的边都是 >w 的,容斥即可。

P11421 [清华集训 2024] 最大匹配 2

神必题。

显然先每种颜色做栈匹配,剩下来的再做一次栈匹配。

考虑栈匹配未被匹配的右括号一定是前缀最小值,左括号同理。

而修改做的是后缀加减,所以前缀最小值个数最多变化 O(1)

对左右括号分别做,主席树维护每种颜色,以及未匹配的括号,处理好前缀最小值个数,就做完了。

CF2053

E

随便数数就好了。

F

由调整,每一行只填一种颜色,做 dp,转移时全局取 max,单点加,偷懒上了线段树。

I1

注意到 max(|ai|)ai,猜测 b 的最大子段和就是 ai,取整个序列即可。

充要条件,bi 的任意前缀和在 [0,s]

首先不能 <0,否则后面和 >s;其次显然不能 >s

而满足 [0,s],则任意子段和 s

考虑 dp,设 fi,j 表示 [1,i] 前缀和为 j 最少添加多少个数。

发现 fi,j 最多两种数,因为转移是先删掉一段区间,然后将小的值往右平移,其他值就取小的值 +1

直接模拟即可。

P9331 [JOISC 2023 Day1] Passport

关键结论:左端点扩展路径和右断电扩展路径一定是一段前缀相同,然后分开各走各的,否则一定可以合并路径不劣。

于是可以先处理出从一个点 x,单独考虑往左往右走的最段路 disx,但是会有重复计算的。

设从 s 开始一直走到 x,然后分开走,答案就是 D(i,x)+disx,于是新建虚点,连向每个点,权值为 disx,做单源最短路,即可处理出每个点的答案。

P7564 [JOISC 2021 Day3] ボディーガード

高妙题。

考虑将时间轴也引入,显然每次一定会一直走,变成每次可以往右上或者右下走,走了 2x,贡献为 x

再考虑将 (x,y) 变换为 (xy,x+y),即将平面直角坐标系顺时针旋转 45 度,放大了 2 倍,所以将 ci2 即可。

现在就变成了每次可以向上或者向右走,然后线段都是横的或者竖的,发现这样不仅形态简单了,而且根据题意显然我们最多是走 0.5 然后再走回来,这样在新图上的距离就刚好是 1,就不用考虑负数了。

去除 O(n) 个关键的 x,y 坐标,弄成 n×n 的网格,预处理 fx,y 表示当前在 (x,y) 之后的最大收获。

相当于先对平面离散化了一遍,这样一整段要么全被覆盖,要么是空的。

再考虑一般情况的走法,要共同行走尽量多,显然是一直往上,碰到某条线,向右走到某个格点,使用它的 f,往右的同理。

以往上的为例,就是处理处 (ci,fi),求 x 坐标下,最大的 ci×x+fi,使用李超树即可,按照 y 从上往下扫描线。

钓鱼(yoshino)

使用 hall 定理判定合法性,就是 1lrn,rl+1x[lLxRxr]0

对左端点扫描线,维护右端点权值的最小值即可完成判定。

再从前往后确定,发现只需要考虑填完一个数后 i+1 位置的合法性,因为不会影响后面的合法性。

于是我们只需找到最小的 x,使得删掉他后最小值合法了,那么我们找到最小值最左的位置,再找这个前缀最小的 x 即可。

挖野菜(mako)

t 上的端点 i 考虑,分别向前向后找到最长的合法前后缀,发现其他合法的都是他们的 border,于是考虑建出 border 树,找到这样 O(n)(x,y),那么对于一个 (a,b) 合法的条件是子树内存在 (x,y)

先对第一棵树考虑,枚举 a,处理 a 子树所有限制,合法的 b 就是这些限制组成的虚树大小,使用“按照 dfn 排序后两两距离和”即可。

优化就是 dsu on tree

单独行动(murasame)

dag 容斥板子题。

先将 13 的系数提出。

f(S)=TS(1)|T|12ET,STf(ST)

然后 ET,ST 可以变成 ES,SET,TEST,ST

f(S)2ES=TS(1)|T|12ETf(ST)2EST

使用半在线子集卷积即可。

时间复杂度 O(n2logn+qlogn)

简单的递归(recursion)

根据质因数分解计算 φ 的方式,发现我们模拟若干次操作后,关于 n 的影响会完全消失,剩下的质因子的次方项完全是递增的等差数列,即可快速计算。

简单的线性代数(algebra)

妙妙题。

二维差分后行列式不变。

发现这样和矩阵树定理不谋而合 DN,相当于加入 (l,r+1) 的边,问生成树个数。

套用矩阵树定理,可以计算图的每棵生成树边权乘积的和。

先求出 dfs 树,那么有 300 条非树边,将这些关键点建出虚树,一条树边不选,就有 dis 的方案,用选的东西来贡献,能做到 O(nlogn+A3),更进阶的方法是广义串并联图。

随机游走(walk)

考虑分块预处理转移矩阵,每段时间散块暴力,整块得到答案可快速知道矩阵,就做完了。

钥匙问题(key)

如果我们将相邻两个没有标记的盒子分成一段,如果一个段有 21,那么全都知道。

否则有 11 且这个数不在端点上,那么可以充当传递。

否则记为第三类。

问一个点就是找到他的类,分别往左往右找第一个非 2 类,判断是否是 1 类即可。

set 即可维护。

最长公共子序列(lcs)

很能想到上面若干段和下面若干段根据一个字符进行匹配,这样是 O(n4) 的。

不难发现内部讨论后是个三维数点,应该能用树套树做到 O(n2log2n)

后面优化似乎很妙,不会。

罗盘(luopan)

打表发现开头是 2k,且是一段完整的区间,分析一下就做完了。

树上睡觉(sleep)

妙妙题。

限制是往下跳比往上跳多,拆成下上和下。

问题就是有一个起点一个终点,然后有上下界限制,平移成 0 的下界和 len 的上界限制。

这是一个经典问题,只要平移不超过限制,那么在同限制下,xy 的答案就是 0yx

这个调整和某道 qoj 的题差不多。

然后显然给出的是一个长链剖分,直接考虑做合并。

长链顶加入一个点,往下的共线好算,轻链并上来就要使用限制为这条长链长度的 dp 数组。

还剩下从一个点往上跳的,会跳到 O(n) 条长链上,使用对应的 dp 数组即可。

这些 dp 数组都可以一开始预处理。

IMAWANOKIWA(popc)

结论可以打表证明。

接下来就是贪心删除判断答案会不会变大,就是找是否恰好有一个 202,使用链表,容易 O(1) 维护邻域,存下 0,1,2 个数以及 02,20 个数即可。

计数部分不会。

猪国杀(game)

超级妙的题。

假设操作序列为 ABABAB...,否则先操作一个。

显然数少的那个颜色一定全被消完。

下面证明关键结论:操作顺序任意,每个 A 找顺时针最近的 B,最后得出来的形态一致。

考虑先将 A,B 的连续段缩起来,这样每个 A 可以选择打一枪,往后打到一个 B,相邻的 A,B,取最小值时刻,这样就会将一个连续段缩起来,由每个段的被操作次数可以还原出原来段内每个点剩下的值。

草,想起来了再写。

基础想象练习题(fantasy)

还在思考细节。

作反演差分,将极长连续段变为只需统计任意连续段的思想很妙。

死亡搁浅(ds)

很妙的!

考虑预处理前后缀 MST,而加入边只会删除原 MST 上两个点路径最大边权边,而加入边的端点数是 O(m) 的,所以我们在原 MST 上建出这些点的虚树,树边为路径最大边权边,那么剩下的边在下一轮不会考虑到,特殊处理,即可保证剩下的边在之后永远不会被考虑到,于是只需存下虚树边以及不会考虑到的边的边权和即可,而处理出新的 MST 的过程直接拿这些边做 kruskal 即可,处理完后再对新的关键点求出虚树即可。

QOJ9676

CF2055E

关于一系列数列求和问题

有关定义:

Δf(x)=f(x+1)f(x)Δ(u+v)=Δu+ΔvΔ(Cu)=CδuΔ(uv)=uΔv+Evδu=vΔu+Euδvabf(x)δx=k=ab1f(k)abΔf(x)δx=f(b)f(a)

例题 1k=0n1ak,a1

Δ(ax)=ax+1axax=Δ(axa1)k=0n1ak=0naxδx=0nΔ(axa1)=ana1a0a1=an1a1

上述就是指数函数的运算,但是幂函数却不能这么求,考虑定义下降幂。

xn_=1(x+1)(x+2)...(x+(n)),n<0

Δ(xn_)=(x+1)nxn=((x+1)(xn+1))xn1_=nxn1_xn_=Δ(xn+1_n+1)xn=k=0nS(n,k)xk_i=0n1im=k=0mS(m,k)i=0n1ik_=k=0mS(m,k)nk+1_k+1

Δ(uv)=uΔv+EvΔuuΔv=uvEvΔu

终极 bossi=0n1aiik_,a1

xk_axδx=xk_axa1ax+1a1kxk1_δx=xk_axa1kaa1axxk1_δx=axa1i=0k(aa1)iki_xki_

CF1746F

随机映射是可以的。

也可以考虑随机带权 0/1,考虑一种数 w0,且 s+w=0,那么 s0,那么这样一种数会改变奇偶性,故正确率为 12k 更大的情况概率更大。

NOI2013 向量内积

先考虑 k=2,如果不存在合法的对,那么 kai,kaj,k=1

我们依旧为每个向量随机带权 0/1,对所有 i 计算 i 与所有权为 1 的向量的和的内积,同理内积为 0 的会改变奇偶性,正确率为 12

k=3 考虑内积的平方为 0/1

拆开内积平方的式子,可以发现,可以转化为长度为 d2 的向量内积的 k=2 问题。

一道题

区间翻转,查询区间子集最大异或和。

随机 1000/1 权值序列。

将每个序列当前区间的异或和加入线性基,假装这个线性基是原区间的线性基即可。

证明不懂,大概需要 O(logV) 个序列就行了。

THUPC2019 找树

由于值域小,考虑直接计数。

使用矩阵树定理,计算 tetWe

其中设 Wexwwe 的边权。

表示多项式做题目给定的运算。

det(T)=(1)c(p)jTj,pj=p(1)c(p)IFWT(jFWT(Tj,pj))=IFWT((1)c(p)FWT(Tj,pj))=IFWT(det(FWT(T)))

而题目给的这种运算竟然有 FWT 变换!不过不太会,先咕咕了。

变换完后每一位独立,拆开求行列式即可。

一般图最大匹配

设计矩阵 G

对于 i<j,则 Gi,j=xi,j,Gj,i=xi,j

结论:det(G)0 等价于图存在完美匹配。

考虑定义,p(1)c(p)Gi,pi

拎出置换环,如果有奇环,反转后,刚好抵消。

偶环,反转后,不抵消,考虑偶环,每个环都存在匹配,而一种匹配两两成环也合法统计。

结论:最大匹配为 rank(G)2

还有一种做法是随机染色成二分图求最大匹配。

QOJ8830

还不会。

CF1641D

将每个值随机映射到 [1,15],跑高维前缀和。

正确概率大约为 i=1510i+115i+1

THUSH2017 巧克力

c 矩阵映射到 [1,k],正确率大约为 k!kk

用斯坦纳树 O(2k3n) 求最小连通块,然后二分求解最大化中位数问题。

有向图哈密顿路

给每个点赋一个 k 维向量,每条边赋边权,给一条路径的权值定义为边权成家乘上 det(av1|av2|...|avk)

dp 求解以每个点为终点的路径权值和即可,中间需要 2k 记录 p 的占位情况。

时间复杂度 O((n+m)k2k)

QOJ4809

考虑边双内存在经过最大权边和最小权边的环,然后网络流求解方案即可。

P8456 地地铁铁

写过了。

QOJ7682

大概就是线段树维护区间点的圆方树。

然后使用删一度点,缩二度点方法压缩信息。

后面没听懂。

耳分解与开耳分解

有向图可耳分解当且仅当强联通。

无向图可耳分解当且仅当边双连通。

无向图可开耳分解当且仅当点双连通。

P5776/QOJ3301

考虑耳分解反向构造边双。

定义 G(s) 表示包含 s 的边双最小边权和,f(s,i,j) 表示当前经过 s 中的点,在耳 i,钦定的中点为 j

时间复杂度 O(2nn3)

双极定向

给定无向图与 s,t,存在双极定向当且仅当连接 (s,t) 后点双连通。

  • 构造点排列 p,使得 p1=s,pn=t,且任意前缀与后缀的导出子图连通。
  • 给图所有边定向得到 dag,使得 s 入度为 0t 出度为 0,其他点入出度均不为 0

方法:tarjan 按照点双方法求出每个点的 fa,low,在预处理时将 u 加入 fau,lowu 的列表中,注意 s,t 路径上的点不加入。

提取 st 的路径,将他们依次染黑,并且递归染黑他们的列表。

注意有染黑顺序按照深度从大到小的限制,由于预处理已经维护这个顺序,故无需考虑。

IOI2019 景点划分

容易发现,至多一个点双有 a,b 两种颜色。

建圆方树,钦定一个点双有两种颜色。

以他为根,若最大子树 >na,无解。

若最大子树 b,则在改子树中选择 b,其余选 a

否则,所有子树大小 <b,对点双做双极定向,取一个前缀为 a,一个后缀为 b,一个个加入前缀圆点对应的子树,某次大小和从 <a 变成 a 时,一定满足 <a+b,则后缀 b

切边等价集合

我们称两条边切边等价当且仅当在任意简单环中,这两条边要么同时出现要么同时不出现。

求解考虑 dfs 树上非树边赋随机权值,树边权值为跨过它的非树边权值。

则权值为 0 的边为割边。

任意异或和为 0 的边集为图的割集。注意实际实现时,只能处理割集较小的情况。

P6914 WF2015 Tours

玩玩就知道答案就是 gcd(||).

QOJ1351

二分图就是不存在奇环,只需考虑给奇环赋值。

则所有边异或和非 0 等价于非二分图。

找到奇环权值异或和,一条边的方案直接统计即可。

两条边就是找异或和为它的方案,开桶统计即可。

边三连通分量

两个 u,v 在同一个边三连通分量的充要条件是不能割两条边使得 u,v 不连通。

直接讨论:

  • 树边权值为 0
  • 存在树边与非树边权值相等。
  • 存在两条树边权值相等。

考虑异或哈希方法区分边三连通分量,情况一二就是子树异或,情况三就是一上一下打两个子树异或,这样就可以区分出中间的连通块了。

对于情况三,dfs 回溯时处理相邻的权值相等的树边即可。

CF1648F

模拟赛题。

PA2020 Trzy drogi

P7349 有向图可达性问题

考虑每 w 个分一块做一次传递闭包,每个点存一个 ull,表示与当前 w 个点的可达性,时间复杂度 O(nw×n=n2w),空间复杂度 O(n)

那么我们处理出来了这样一张表。

其中列表示起点,行表示终点,那么每次询问相当于询问一个左下角权值和。

先考虑蓝色部分,容易从下往上处理。

橙色部分就是反过来做,每个点存一个 ull,表示当前 w 个点到这个点的可达性。

对于绿色部分,每次 O(w) 处理即可。

时间复杂度 O(n2w+qw),空间线性,可以通过。

SNOI2020 生成树

广义串并联图经典题了。

UOJ138

直接给非树边赋值 2i

这样只有不超过 2k 种边权,证明大概考虑非树边构成的虚树上一条边的权值都相同的,可以缩起来。

然后使用记忆化搜索,每次新增一种编号就加入到线性基里判断是否合法,卡不掉。

QOJ9877

咕咕咕。

完全有向多分图

缩点,按照正拓扑序排序,设为 A1,...,Ak,则:

  • |A1|=1,设 t 为最大的 p 使得 |A1|==|Ap|=1,且这些点都在同一部分,则 A1,...,Ap 互不可达,且全部可达 Ap+1,...,Ak
  • 否则 |A1| 可达 A1,...,Ak

可以进行拓扑序计数。

CF1806F2 GCD Master

相当于将所有数分成 nm 个集合,最大化每个集合的 gcd 的和。

min(S)<max(S),则 2gcd(S)max(S)

若有两个满足 min(S)<max(S) 的集合 S1,S2,则 max(max(S1),max(S2)) 单独一组,其他一组,不劣,

证明:设 gcd(S1)=x,gcd(S2)=y,xy,则选择 max(S1) 为一组,变化为 max(S1)+gcd(x,y)2x+gcd(x,y)x+y

故最多一组满足至少两种数。

我们枚举这样的组中的数的个数,那么还需考虑合并相等元素的共线,即为每种元素去掉一个后的前若干大。

于是问题转化为在元素互不相等的集合中选择 t 个数,最小化 sum(S)gcd(S)

将元素排序得到 a1,...,an,若 k<j<i,akS,ajS,aiS,则 gcd(S)aiaj,将 ai 换成 ak 不劣。

证明:sum(S)gcd(S)sum(S/ai)+aj>sum(S/ai)+ak

因此 S 形如 a1,at1,ap,tpn

枚举 t,只有 logVgcd

CEOI2014 The Wall

考虑 (0,0) 到每个关键点左上角的最短路径,它一定被回路包含。

证明:否则,存在最短路径的一段区间在回路外面,则最短路径的子区间还是最短路径,调整。

显然任意一条不跨过这些路径的回路都会经过关键点。

那么拆点,删掉会跨过这些路径的边,求最小环即可。

具体考虑起点 (0,1),终点 (1,0) 的最短路即可。

IOI2019 折线

直观想法,螺旋往里绕,但是斜线会炸。

考虑维护三个序列,一个螺旋,一个左上到右下,一个左下到右上。

尝试螺旋,发现不合法时一定满足是剩下点的一个角,一定可以放到另外两种上。

每种序列段数严格等于点数加一,是合法构造。

IOI2024 象形文字序列

如果保证有解。

对于一种字符,将他出现次数较少一侧标记为关键位置。

相当于在 a,b 中相等元素匹配,使得每个关键位置在匹配中,且匹配不交。

考虑 a,b 中第一个关键位置。

ap=bq 则可以直接匹配。

b1,...,bq1 中出现过 ap,则 ap 可匹配,另一侧同理。

只有一侧可匹配时直接匹配。

若两者均可匹配,则需要进一步分析决策。

重新定义:若 ap+1,...,anbq 的出现次数 bq,...,bmbq 的出现次数,则 ap 可匹配。另一侧同理。

若在新定义下两者均可匹配,则考虑 aqbp...bpbpaq...aq,它们均为 a,b 的公共子序列,但不可能同时是 c 的子序列,玩一玩就理解了。

直接递归求解即可。

接下来需要判断求出的 c 是否是最全公共子序列。

尝试构造一个 cS 且不为 c 的子序列。

依次加入 c 的每一个字符,维护当前在 a,b 中的匹配位置 ap,bq,设 c 中的字符对应 a,b 中的位置为 xi,yi,令 c 对应在 c 的匹配为 xpc,ypc

显然有 pxpc,qypc

若某个时刻有 p<xpc,q<ypc,则一定可以构造出 c

因此只需考虑 p=xpcq=ypc 的情况。

情况 1p=xpc,q=ypc,假设下一个匹配的是 a 中的一个关键字符 x,设 pcpc,由于在 a 中,xpc+1...pc1 的位置上不存在 x,且冗余位置不可能存在 x,那么 p=xpc 成立,则情况 1 可能生成情况 1,也可能转到情况 2

情况 2:不妨设 p=xpc,q<ypc,接下来选择某个字符 x,对于 b,如果在 (q,ypc] 部分都不存在字符 x,那么当前情况会退化为情况 1,否则有 qypc,所以 q<ypc,后面不讨论了。

fp 表示 p=xpcq 的最小值,gq 表示 q=ypcp 的最小值。

由上知道 f,g 不存在互相转移的情况,只需判断能否通过增加一步操作达到不合法情况即可。

ucup3 stage21 G

考虑度数和最小的点 u,所有点度数和为 4(n1),则 d1(u)+d2(u)3

d1(u)+d2(u)=1,那么都是叶子,直接删除递归子问题。

否则,令 d1(u)=1,d2(u)=2,(u,a)T1,(u,b),(u,c)T2,且 T2(u,b)ua 路径上。

T1,T2 中删除 u,在 T2 中加入 (b,c) 递归子问题。

在子问题中,必然有交换 (b,c),(d,e),将这一步改为交换 (u,a),(u,b),交换 (u,c),(d,e)

合法,太妙了!

ucup3 stage20 I

将每个物品重量较少 mn,则每个物品重量在 [n,n],总重量在 [n,n]

令选出了 b1,...,bn,则必然存在 b 的一种排列方式满足所有前缀和在 [n,n]

那么倍增多项式幂即可,每次只保留 [n,n] 的项。

ucup3 stage7 C

考虑钦定每种物品在哪个商店买到,那么一个商店的代价就是所有物品排序后奇数位置和。

先钦定每种物品放在价格小的商店中。

设两种物品代价 x1,y1,x2,y2max(x1,x2)min(y1,y2),显然不如不换。

那么排除掉了包含和相交的情况,那么所有更换的线段不相交。

fi,j,k 表示考虑后 i 个点,两个商店物品奇偶性,最小代价。

转移考虑是否更换当前物品,需要支持快速计算一段区间的代价,计算方式相当于矩阵乘法,线段树就行了。

ucup3 stage13 N

记录每一段 0 的个数 a1,...,ak

操作为选择 ai1,ai+12,合并为 ai+ai+13

后面还没懂。

ucup2 semifinals H

ucuo1 stage0 L

割集当且仅当线性相关。

令经过树边 (i,i+1) 的非树边集合为 Si,那么我们只需维护 Si 的等价类。

ai,j 表示加入的第 j 条边是否包含 (i,i+1),那么 i,jt 时刻处于同一等价类当且仅当 tLCP(ai,aj)

操作过程相当于分裂,考虑倒过来变成合并,将 ai 按照字典序排序,相当于 triedfs 序,在 LCP(bi,bi+1) 时刻将 i,i+1 合并即可。

区间 lcp=min 相邻 lcp

lcp(bi,bj)=mink=ij1lcp(bi,bi+1)

AGC068E

AGC055F

UOJ25C

UOJ NOI ROUND7 D1 C

ROI2017 学习轨迹

经典题了。

EGOI2024 Garden Decorations

zak 的二进制警报器

传统警报器只能做到 O(klogkk1Vlogq)

而二进制警报器能做到 O(1)O(klogV)

对于一组警报点 a,维护一个阈值 h,只要 ai 经过 2h 的倍数时就报警(例如 aiai+w,我们称他经过了 (ai,ai+w])。

报警后进行检查,如果当前的 h 能让所有 ai 在不报警的前提下总和超过 v,那么 hh1

具体实现时判断 viai(2h1)×k,就 hh1,不用特别精细。

对于某个时刻的 h,满足 viaiO(k2h) 的,当一个元素报警两次后,必然至少增加了 2h,当前的 h 对应的报警次数总和不超过 O(k),否则就大概满足 >v 了。

故每组报警点总报警次数为 O(klogV)

每次修改会报警的 h 一定是一段后缀,拿出后缀 h 的所有报警器(用 vector 维护即可),每组报警器在 rebuild 时,预处理 rem 表示 viai 再减去每个 ai 不报警情况下的空间。

而不报警的情况下 rem 是不变的。

太牛牛了。

thupc2024初赛 套娃 对极小 mex 区间的处理

本质不同极小 mex 区间只有 O(n) 个。

处理出所有 0mex,1mex 区间。

对于 x1mex 区间集合求出极小区间。

对于 x1mex 区间集合中的每个区间,分别找到左右最近的 x1,形成两个区间,求出他们的 mex 为 a,b,加入到 amex,bmex 区间集合即可。

很妙的。

CF2056F2

观察 n!icnti! 的组合数连乘形式,发现式子为奇数当且仅当 cntn 的二进制 1 位划分为若干个集合。

在这样的形态下,含有二进制最高位的 cnt 一定是绝对众数,也就是中位数,同时也是最大值,枚举 x,c,则方案数为 (xc1)×{totc}

先枚举 c,我们需要解决快速求 {totc}mod2 的值,组合意义是将 n 个不同元素划分到 m 个无序集合,钦定每个集合的代表元是其中编号最小元素,那么一个未钦定元素,分配的方案数就是之前代表元个数,总方案书就是乘积。

那么我们要求,每个未钦定元素都要满足之前有奇数个代表元,相当于第 2t 个代表元必须与第 2t+1 个相邻,若 m 为奇数,因为偶数的时候最后一个代表元必须在 n,就能转化为奇数的情况了。

相当于第一个代表元在 1,在剩下 n1 个位置放 m1 个元素,要求 2t2t+1 相邻,则想捆绑起来,于是任意情况下,方案数为 (n1m2m12)

然后我们要求 xc1 的超集且 x[0,m),则我们搜索 x 的二进制位,当当前位可以填 0/1 时,我们添加 nb 剪枝(超级像省选 2024 D1T2!!):若后缀全部填 1 都满足 <m,则我们直接加速:

  • 若后缀 c1 全是 1,返回 cur
  • 若后缀只有一个位置为 0,返回这个 0 的二次方。
  • 否则,返回 0,因为所有数抵消,这个和前缀异或和与模 4 余数相关很像。

P11427 [清华集训 2024] 绝顶之战

P11524 [THUPC2025 初赛] 背向而行

P11420 [清华集训 2024] 乘积的期望

https://www.luogu.com.cn/article/zc7k65vt

https://www.cnblogs.com/zkyJuruo/p/18428124

posted @   蒟蒻orz  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示