2025 01 做题纪要
往者不可谏,来者犹可追。
0102
A. 切割蛋糕(cake)
要保证 A 的平均值大于整体平均值,直接开个队列时刻保证这个即可。
B. 游乐园(park)
牛券,开两个反悔堆,一个反悔券,一个反悔牛。
C. 有根树(tree)
简单的观察可以得到链底的顺序必须要在后面,根据这个可以让所有点向所在链底连边,构成一棵拓扑序树,每个父亲都是链底,保证儿子在父亲之前,简单推导知道方案数是 \(\frac{n!}{\prod_{i=1}^n size_i}\),经过深刻的观察发现每个子树大小就是每个链顶大小,所以这题就是维护链顶的 \(size\),先树剖,拿数据结构维护是两个 \(\log\),但是我们有颜色段均摊理论,所以直接拿个栈类似于 ODT 一样暴力维护就能 \(1\log\) 了。
D. 集合操作(set)
跟 fengwu 玩树 很像,一个数只会被他的约数删去,而只有一个数被自己删去才有贡献,考虑期望线性性算每个数的贡献,那么答案就是 \(\sum_{i=1}^n\frac{1}{d(n)}\),洲阁筛或者 min_25。
0103
P4983 忘情
简单推下式子后就是 \(val(l,r)=((\sum_{i=l}^ra_i)+1)^2\),wqs 二分套斜率优化即可。
P4383 [八省联考 2018] 林克卡特树
有一个树上背包的暴力,就是设 \(f_{i,k,0}\) 表示 \(i\) 子树内切了 \(k\) 次与 \(i\) 不在一个联通块的最长路径,\(f_{i,k,1}\) 表示在一个连通块,\(s_{i,k}\) 表示以 \(i\) 为起点的最长路径,大力转移即可。(大部分人直接拿度数来 DP,比较好)。
然后意会这个东西是凸的,上 wqs 二分。
CF1175G Yet Another Partiton Problem
先写出转移式子 \(f_{i,j}=\min\{f_{k,j-1}+val(j,i)\}\),肯定要一个东西把最值去掉,考虑用笛卡尔树做这个事情,一个子树的最值是一样的,再考虑一个子树的转移点,设 \(d\) 是最值,那么有 \(f_i=f_{j-1}+di-dj\),就是 \(f_{j-1}-dj\) 最小,这个就相当于拿 \(d\) 的斜率去切 \((j,f_{j-1})\) 的点组成的凸包,\(d\) 是单调的,所以直接维护这个凸包,假设这个子树的最佳转移点是 \(p\),那么 \(f_i=f_{p-1}+di-dp\) 发现只有 \(i\) 不知道,那么这个就可以看做一条关于 \(i\) 的直线 \(di+f_{p-1}-dp\),那么就相当于查直线最值,李超树维护。
在笛卡尔树上就是考虑左子树和 \(LCA\) 对右子树的影响,每次启发式合并凸包,然后找到最优决策点,插入直线,删除直线,拿可持久化李超树或者开栈存变化维护即可。
0104
A. aw
经典 trick 考虑一条边的贡献,发现在操作这条边前,这条边断开的两个连通块不会产生交换,然后依据这个进行 DP,只需要维护期望个数和期望个数的平方即可。
不是,这个 trick 怎么次次都想不起来。
0105
awa
肯定是要枚举一个东西,简单试试后发现枚举断点有前途,考虑断点 \(p\) 能往前匹配的最长前缀和能往后匹配的最长后缀,分别为 \(x',y'\),那么能匹配的所有前后缀就是对应 \(\text{fail}\) 树上的点到根链,那么 \((x,y)\) 合法当且仅当存在一组 \((x',y')\) 满足 \(x\) 是 \(x'\) 的祖先,\(y\) 是 \(y'\) 的祖先。直接根据断点算肯定会重,考虑对于一个 \(x\) 考虑所有合法的 \(y\),发现合法 \(y\) 的数量是 \(x\) 子树中所有对应点 \(y\) 在另一棵 \(\text{fail}\) 树上组成的虚树的边的数量,虚树的边的数量为\((相邻两点距离和加上首尾点距离和的)\) 的一半。线段树合并维护即可。
[AGC032E] Modulo Pairing
如果没有 \(mod\) 的限制,那么直接从小到大排序后首尾匹配即可。
根据这个可以将点对划分成两种,分别为 \(x+y\) 和 \(x+y-mod\),只需要关心这两个式子的大小即可。如果知道每个点该如何划分,那么就可以用上面的贪心方式。
套路观察点对交换后的优劣,假设现在有两个点对 \((a,b),(c,d)\),钦定 \(b>c,a+b<m,c+d>m\),交换后得 \((a,c),(b,d),a+c<m,b+d>m\),发现 \(a+c<a+b,b+d-m<b<a+b\),也就是说这样的交换不会使答案变劣,所以 \(x+y\) 的匹配一定是前缀,\(x+y-mod\) 的匹配一定是后缀。
再来观察分界点,如果将分界点左移,两种匹配的答案都不会变大,所以分界点尽量左移,但是需要合法性,二分一下即可。
划分贪心一定要观察点对交换对答案的影响。
P3265 [JLOI2015] 装备购买
线性无关考虑线性基,然后贪心从小到大插入即可,精度不能太大,不然炸了。
P1484 种树
反悔贪心,反悔相当于翻转,价值是两边减去中间,用链表维护。
这种结构想链表。
P4053 [JSOI2007] 建筑抢修
不能按照最晚开始时间排序,要保证之前的反悔一定不能撤销,所以以后遇到这种考虑加个权值再排序。
CF335F Buy One, Get One Free
神仙题,首先分组保证之前的免费机会一定能用,那么就是需要免费获得的价值最大,所以需要一个小根堆。
对于当前物品 \(x\),首先可以把没用的免费机会全用了,然后剩下一些考虑买法。
设当前堆顶是 \(k\),如果反悔了,就会免费获得两个 \(x\)。
如果 \(k\ge x\),如果反悔那么会获得 \(2x\) 的价值,失去 \(k\) 的价值,如果 \(2x-k\ge 0\),那么可以反悔,但是有一种可能就是这样的反悔不优,可能在以后把这个反悔反悔掉,比如我需要这两个物品来获得新的免费机会。比如 9 8 6 6 5 5,需要用两个 \(6\) 来获得两个 \(5\),朴素的反悔不能把之前的拆开,只能反悔整个,所以我们先不反悔堆顶,而是相当于获得了一个 \(2x-k\) 的物品。
如果 \(k<x\),那么反悔就一定优了,直接反悔即可。
0106
P10060 [SNOI2024] 树 V 图
先考虑序列上怎么做,发现相同颜色构成一个区间,那么可以根据分界点来 DP,树上同理,每个颜色构成了一个连通块,然后类似序列去找分界点,但是找这个很麻烦,转移要考虑同色不同色,所以把连通块缩成一个点,设 \(f_{i,j}\) 表示 \(i\) 块的关键点在 \(j\) 的方案数,\(\mathcal{O}(n^2)\) 转移即可。
P10061 [SNOI2024] 矩阵
一看就感觉不太能数据结构,平衡树跟暴力一个分,考虑维护相对位置,发现每次旋转只要确定了矩形的边框就能确定内部情况,十字链表维护每个位置的连接情况,加就是差分,每次暴力找出边界然后直接重构即可,方向变化可以通过旋转次数得出,这也是一个加的问题,时间复杂度 \(\mathcal{O}(n^2)\)。
P10062 [SNOI2024] 拉丁方
从特殊性质入手,\(R=n\) 时,整个右半部分没有数,那么每一行是有一个填数集合的,填完之后需要满足,每一列没有重,发现这是一个图的匹配问题,行向数字连边,所以这是一个二分图,那么相当于找出 \(n-R\) 对完美匹配来,每一对匹配构成一列,观察到所有点的度数都是 \(n-C\),否则不合法。二分图边染色可以解决这个问题,每种颜色构成一组完美匹配。
考虑一般情况,那么就是左下部分没填,先用同样的方法填左下部分,当度数大于 \(n-R\) 时不合法,然后直接同样方法填左半部分即可,时间复杂度 \(\mathcal{O}(n^3)\)。
T1 没缩点硬写,唐不唐,导致后面 25pts 没写完,思考不充分就写太致命了。
[ABC305Ex] Shojin
容易观察出这个函数复合可以直接临项交换法排序,另外 \(A=1\) 的可以直接去掉,反正最优贡献只有 \(B\),那么转移只会从前 \((\log X)+1\) 个位置转移,手玩加意会发现满足凸性,上 wqs 二分即可,但是这题需要找出段数,所以找到最后一个大于 \(X\) 的位置和第一个小于 \(X\) 的位置,然后计算答案。这题数据极强,要注意很多边界情况。
函数复合退式子贪心,模拟赛考过一次的 trick 当时不会,现在居然还能忘,推一推式子怎么你了。
今天才写三道,效率太低了。
0107
P10284 [USACO24OPEN] Splitting Haybales P
直接套公式做完了,不过有不少人反应 FHQ 的有交合并必须有第二关键字,否则深度爆炸,经过讨论原来是他们的 FHQ 是偷懒写的,写最正常的 FHQ 就不会有问题。
[AGC014D] Black and White Tree
发现后手的操作很强大,但是先手如果涂了与叶子相邻的节点,那么后手下一步必须涂叶子,也就是说先手可牵制住后手,把这样的点涂完之后就没用了,就会产生新的叶子,考虑一层一层剥叶子,重复这个过程,如果最后还有没涂的点,就是先手必胜。
这个问题的本质就是后手必胜的条件树上存在完美匹配。
[AGC016F] Games on DAG
先手必胜的条件是 \(SG(1)\not =SG(2)\),这样不是很好统计,正难则反,统计 \(SG(1)=SG(2)\) 的情况。因为节点不多,所以可以枚举哪些节点的 SG 函数相同,类似于 NOIP 宝藏 那道题,状压 DP 分层转移,设 \(f_{i,S}\) 表示集合 \(S\) 中的 SG 函数值小于等于 \(i\) 的合法方案数,枚举子集 \(T,K=S-T\),那么新的 \(T\) 中每个点就要向 \(K\) 中的每一层至少一个点连边,这样需要知道前面点的具体情况,统计不了,考虑倒过来,\(f_{i,S}\) 表示集合 \(S\) 中的 SG 函数值大于等于 \(i\) 的合法方案数,这样就是 \(K\) 中的点必须向 \(T\) 中至少一个点连边,\(T\) 向 \(K\) 随意,预处理点向集合连边的边数就能转移了。这种状压 DP 的前一维没用,直接滚掉,时间复杂度就是 \(\mathcal{O}(n3^n)\)。
你什么时候能记住学过的东西。
[AGC010D] Decrementing
简单的情况是存在 \(1\),那么只能进行减的操作,这时如果存在奇数个偶数就是先手必胜。
猜测元素奇偶性就是胜负条件,观察到任意时刻一定存在至少一个奇数,\(\gcd\) 为偶数并不会改变元素奇偶性。
所以当且仅当只存在一个奇数,给奇数减一后才有可能改变元素奇偶性。
假设现在一共有奇数个偶数,那么先手可以给一个偶数减一,然后奇数的个数就大于 1,后手无法改变元素奇偶性,持续下去先手必胜。
假设现在有偶数个偶数,那么先手只有去改变元素奇偶性才有可能获胜,他只能去给唯一的奇数减一,这时 \(\gcd\ge 2\),不断迭代下去只会进行 \(\log\) 轮,整体时间复杂度 \(\mathcal{O}(n\log^2n)\)。
[AGC002E] Candy Piles
从大到小排列抽象成网格图,一行的个数就是 \(a_i\),比如 1 2 3
0
0 0
0 0 0
那么可以看成起点在左下角,局势取决于起点的右上部分,全吃就相当于向右移动一格,吃一个就相当于向上移动一格,不能移动到外面。
现在用 0 表示必败,1 表示必胜,有一个人类智慧的观察就是 \(P(x,y)=P(x+1,y+1)\),考虑如果不相同。
0 1
1 1 0
0 1 0
这时就已经产生了矛盾,所以 \(P(x,y)=P(x+1,y+1)\),那么起点的状态就与所有 \((x,x)\) 的状态一样,考虑找到最后一个 \((x,x)\) 位置,查看他上方和右方的格数即可判断它的胜负情况。
[AGC029D] Grid game
高木一定往上走,最后的局面一定是高木不能往上走,青木不走,结束游戏,也就是说青木要把位置移动到障碍物下面,考虑贪心地进行这个过程,找出移动路线,如果存在一个障碍物的下方位置 \((x,y)\) 满足 \(y\le p_x\),则可以算作答案。如果这题数据很大的话就只能离散化去找了,麻烦点。
0108
P2490 [SDOI2011] 黑白棋
每一对黑白石子互不影响,可以抽象成一堆石子,然后就成了 \(\text{nim-k}\) 博弈,所以就成了分配石子问题,单步容斥,统计先手必败的方案。按每个二进制位考虑,设 \(f_{i,j}\) 表示考虑了前 \(i\) 个二进制位,用了 \(j\) 个石子的分配方案数,枚举倍数乘上分配系数转移即可,统计时考虑剩下的石子插到相邻两堆的缝里即可。
P6487 [COCI2010-2011#4] HRPA
斐波那契尼姆博弈模板。
P6791 [SNOI2020] 取石子
众所周知,nim 博弈有很多种,nim-k 博弈,威佐夫博弈,斐波那契博弈,巴什博弈……,这个题面去掉 \(k\) 的限制之后就是斐波那契博弈了,然后单步容斥数位 DP 爆搜即可。
为什么总是记不住
[AGC010E] Rearranging
使劲观察发现不互质的数之间的相对顺序不可能发生变化,如果有一个排列 \(P\),存在 \((P_i,P_j)\not =1,(i<j)\),那么不可能改变 \(i\) 与 \(j\) 的相对位置,所以可以 \(i\) 向 \(j\) 连一条有向边,依据排列连边之后,答案一定是这个 DAG 的最大拓扑序,所以相当于我们来给这些边定向,把这些边连出来后贪心从最小的点开搜,钦定边的方向,最后优先队列拓扑即可。
P2599 [ZJOI2009] 取石子游戏
这个题有点过于神仙了,比前面两道黑都难,先咕了。
[ABC217H] Snuketoon
Slope Trick,板子,我会补。
0109
A QOJ7877 等差
容易想到对于每个 \(k\) 找到最长的合法前缀,判断区间 \([1,r]\) 合法只需要检查 \(hs_{1,r-k}+hs_{2k+1,r}=2hs_{k+1,r-k}\),等差数列式子变形得来,这个是哈希,所以每个位置是互相对应的,所以能这么判断,二分即可,调和级数直接判也行,双指针也可以。
B. 叉积
还没学会闵可夫斯基和。放弃计算几何了。
C. 序列变换
不会
slope trick 没学会。
P3281 [SCOI2013] 数数
属于麻烦的数位 DP,容易想到对每一位考虑贡献,设 \(f_{i}\) 表示到 \(i\) 位以后的贡献(两部分,全部的和以 \(i\) 开头的),直接搜即可,注意有前导零时开头不贡献全部,会算重。record
P3167 [CQOI2014] 通配符匹配
陈年老题,设 \(f_{i,j}\) 表示匹配到了第 \(i\) 个通配符,第 \(j\) 个位置的可行性,转移形如
哈希来辅助匹配。
[ABC139F] Engines
极角排序后肯定选连续的一段,这个东西只满足决策单调性,不满足双指针,原因同决策单调性,比如后面有一个更优的,然后全崩了。注意到选的一定在一个平角内,因为加上与答案夹角小于 \(\frac{\pi}{2}\) 一定不劣,然后可以根据这个做双指针,有一个更聪明的做法,把反向量也加进去,然后先加入 \([\pi,2\pi]\) 的原向量,这样遇到一个向量就加上他的贡献,保证了每个平角都被统计到,时间复杂度 \(\mathcal{O}(n\log n)\) 瓶颈是排序。
CF1841F Monocarp and a Strategic Game
首先推式子,\(a^2+b^2-2ab+c^2-d^2-2cd=(a-b)^2+(c-d)^2\),直接不好统计,看成 \((a-b,c-d)\) 向量的形式就跟上题一样了。
0111
A. swap
老套路,先贪心地去最大,到差不多 \(\log K\) 位数的时候跑暴力。
B. string
放到 trie 树上,可以知道一个点应该被经过的次数,那么对于一个节点的贡献就是恰好走完两个儿子的概率,对于一个节点的左右儿子,肯定想走经过次数多的儿子,设 \(f_{i,j}\) 表示左右儿子经过次数分别为 \(i,j\) 的答案,\(f_{i,j}=f_{i-1,j}p+f_{i,j-1}(1-p)[i\ge j]\),另外一种情况同理,答案就是所有节点的答案乘起来。
C. room
先跑出连通块,分类讨论,第一种是本来就联通,第二种是消除 A 后已经联通,第三种是消除后通过连通块联通。前两种直接盼,第三种枚举第一个障碍物,但是这样有算重,因为 A 和 B 的邻接连通块可能有好几个,最多会有三个,拿 std::map 判连的联通块是谁即可。
D. tower
题面都不对。
0112
写了 ARC,感觉之前白训了。
ARC189A
观察到每个连续段独立,且一个连续段的长度为奇数,操作相当于缩点,有 \(f_i=f_{i-2}(i-2)\),且操作次数为 \(\lfloor\frac{i}{2}\rfloor\),拉出来组合数即可。
做的时候推复杂了,直接烂完了。
ARC189B
一个 trick 是做对称操作相当于交换两个差分位置,这题只能奇偶性相同的位置交换,所以两种位置都排序后做前缀和就好了。
傻逼,见过的 trick 想不起来。
ARC189C
先考虑一个颜色,发现一定是一条链,所以相当于有了两条链,每条链中的点必须走,考虑有哪些点可以一次走两条链的贡献,因为要满足顺序关系,不难发现这个是 LCS,排列的 LCS 可以当成 LIS 做,然后就做完了。
ARC189D
建出笛卡尔树直接做,\(ans\) 表示答案,\(wans\) 表示第一步无视等于的答案,如果儿子的子树答案大于父亲值,那么儿子可以等于父亲的无视答案,线性。
还有一个观察就是先吃小于他的后再判断方向吃,这样扩展次数不会超过 \(\log V\),所以暴力二分也行,两个 \(\log\)。
0113
A. 枇杷树
傻逼搜索题,记忆化爆搜拿脚做,不需要脑子,我赛时没写。
B. 上古遗迹
清新数据结构,一定不要往单调栈上想,从贡献的式子出发,有两个 \(\min,\max\) 非常不友好,分讨掉就能直接李超树维护了,双 \(\log\)。
又是没有分讨 $\min,\max$,好像之前也犯过这个错,赛时想了一年都根号不了。
C. 吞天得手
傻逼搜索题,要求字典序最小,启发我们从当前最优往后扩展,现在有一个位置集合,表示现在的所有最优解位置,那么从第一个位置往后找最小的数可以构成下一个位置集合,先输出答案,再去搜下一层,跟 A* 差不多,然后搜完之后找次小,以此类推,因为只用找 \(\log\) 个位置,所以直接暴力预处理出来即可。
T1,T2 没切就是太菜了。
[ARC078B] Fennec VS. Snuke
相当于两个人在扩展自己的颜色,由于树上路径唯一,所以两个人不可能到达对方某个节点之后的颜色,相当于那个节点封锁了道路。已经封锁的地方可以最后再填,所以每个人都想让自己封锁的地方更大,所以他们需要尽可能的填 \(1\) 到 \(n\) 路径上的颜色,设后手在这条道路填的最后一个位置为 \(x\),如果 \(size_x\ge n-size_x\),后手必胜,否则先手必胜。
[ARC078E] Awkward Response
首先肯定要知道这个数有多少位,可以问 \(10^k\) 来解决,对于 \(k>\lg n\),必有询问 \(10^k\) 返回 \(\text{N}\),否则有 \(n=10^x\),对于这种特殊情况,可以问 \(2\times 10^k\) 来解决,对于 \(k<\lg n\),必有询问 \(2\times 10^k\) 返回 \(\text{N}\),否则 \(n=1\)。
判完这种特殊情况后考虑从高到低确认 \(n\) 的每一位,设 \(ans\) 表示已经确定的数,那么肯定是要问与 \(n\) 位数不同的数,否则一定会返回 \(\text{Y}\),考虑询问 \(10(ans+x\times 10^k)+10^{k+1}-1\),前面的字典序相同,后面所有数都为 \(9\),这时如果返回 \(\text{N}\) 则表示询问的这一位小于 \(n\) 的这一位,可以通过二分得出这一位的数,如果没有合法的,则说明这一位是 \(0\)。
总次数不会超过 \(60\) 次。
0114
[ARC078F] Mole and Abandoned Mine
很经典的状压套路,首先有一步转化是求保留的最大边权值,然后考虑答案的形态一定是若干个边双连起来,起点是 \(1\),终点是 \(n\),有一个重要的性质就是一个边双内的边可以随便加,且每个边双内的点集不交,所以可以根据这个来状压 DP,设 \(f_{i,S}\) 表示路径从 \(1\) 到 \(i\),已经处理完的点集为 \(S\) 的最大权值,转移形如 \(f_{i,S}=f_{j,T}+W_{S-T}+e_{j,i}\),其中 \(W_{S}\) 表示点集 \(S\) 中随意加边的最大值,直接转移复杂度是 \(3^nn^2\) 的,AT 神机可以通过。
发现这个转移有很多状态的重复枚举,不妨处理一个 \(g_{j,S}\) 表示 \(\max{f_{i,S}+e_{i,j}}\),这个可以 \(2^nn^2\) 来处理,这样就能快速转移了,时间复杂度 \(\mathcal{O}(3^nn+2^nn^2)\)。
见过这么多次的套路为啥还是不会,发现关键性质之后为啥看不出来这个很关键?
0115
A. Giao 徽的烤鸭
设 \(p_i\) 表示 \(i\) 的利润编号,那么有一个重要的观察是对于相邻点 \(i,j\),一定有 \(|p_i-p_j|\le 1\),所以设 \(f_{i,j}\) 表示在 \(i\) 的子树中,\(i\) 节点的贡献编号是 \(j-1\) 的最大收益,\(0\) 的状态是不选,然后根据上面的限制就有转移 \(f_{u,i}=\sum\max(f_{v,i-1},f_{v,i},f_{v,i+1})\)。
B. A Dance of Fire and Ice
用原根转化为加法后直接上 std::bitset,当这个数是长度的倍数的时候不用做,否则如果做完之后没变化可以缩短长度为 \(\gcd(len,x)\),不然就有新的贡献,这样复杂度就跟 \(n\) 无关了。正解是树状数组二分哈希,也是找有贡献的位置,没太懂。
C. 挖掘机技术哪家强
容易观察出就是找最大团,然后根据结论转化,最大团等于补图的最大独立集,这个题的性质是如果 \(a<b<c\),如果 \(a,b\) 之间没边,\(b,c\) 之间没边,那么 \(a,c\) 之间一定没边,满足传递闭包的性质,那这个就可以看做 DAG 了,这时最大独立集等于最长反链等于最小链覆盖等于点数减去二分图最大匹配数。
然后这个东西补图中的边很多,所以一开始先贪心地匹配,这时最多只会剩 \(\sqrt m\) 个点没有匹配上,然后再去增广,这样复杂度就对了。
[ARC188A] ABC Symmetry
容易看出来条件是 \(A,B,C\) 的个数奇偶性相同,然后设 \(f_{i,s,a,b,c}\) 表示到 \(i\) 目前的状态是 \(s\),\(A,B,C\) 的奇偶与其他两个不同的方案数,计算可以直接异或算。
[ARC188B] Symmetric Painting
手玩发现位置依次是 \(0,2K,-2K,4K,-4K\cdots\),那么 \(2K\) 与 \(-2K\) 之间不能冲突,所以要求 \((2K,-2K)=1\) 即 \((2K,n-2K)=(2K,n)=1\),如果 \(n\) 为奇数需要满足这个,如果 \(n\) 为偶数,那么肯定会选完一些点后再用 \(\frac{n}{2}\) 新开一轮,这两轮时对称的,此时 \((\frac{n}{2},2K)=1\),然后 \(n\equiv 0\pmod 4\) 时一定不行。
我他妈怎么都一个星期没写了,机房太吵了,来补一补。
0116
A. 圣诞树
设 \(f_{i,j}\) 表示到了第 \(i\) 层,用了 \(j\) 种颜色的方案数,转移形如 \(f_{i,j}=\sum f_{i-1,k}{m\choose j}s_{l_i,j}-f_{i-1,j}s_{l_i,j}\),其中 \(s_{i,j}\) 表示用 \(j\) 种颜色吐 \(i\) 个格子的方案数,这个 DP 是 \(n^2\) 的,重点在于处理 \(s\),有朴素的为 \(s_{i,j}=m(m-1)^{j-1}-\sum{m\choose k}s_{i,k}\),这个是 \(n^3\) 的,并且很蠢,没有用到之前的状态,考虑组合出新方案,考虑最后一个作为新颜色和旧颜色,有转移 \(s_{i,j}=s_{i-1,j-1}j+s_{i,j-1}(j-1)\)。这个题有个毒瘤的地方就是组合数的计算,考虑暴力除以 gcd 分配因子来解决。
B. 过河
剔除关键点后给边连边,那么要避免有边的情况,简单手玩后发现关键点回来前运过去一个点,回来后运过去一个点,在这之前两边的点直接一定没边,构成了二分图。所以能过河的充要条件就是删除两个点后,整张图是一个二分图,暴力枚举两个点比较笨,考虑枚举一个点,看看能否通过删除一个点变成二分图,然后这个就是经典问题了,搜出 dfs 树后删除的点一定被所有奇环经过,考虑构成的新环就是同一棵子树不能同时有奇环和偶环覆盖这个点,根据这个判一下就行了。
C. 点对游戏
发现分配到一个点对的概率相同,然后点分治。
这场 T1 不会就是唐,T3 不会就是傻逼。
0117
[ARC188C] Honest or Liar or Confused
设 \(d_i\) 表示这个人是否撒谎,\(g_i\) 表示这个人是否糊涂,那么 \(f_i=d_i\oplus g_i\) 表示一个人说的话是否错误。对于一个 \(x,y,c\),有关系 \(f_x\oplus d_y=c\),然后就成了 2-Sat 问题了,考虑分配 \(f_i,d_i\) 即可,这样可以根据 \(f_i,d_i\) 来得到 \(g_i\),使用扩展域并查集维护 \(f,g\) 的正反点即可。
P8337 [Ynoi2004] rsxc
设一个区间的线性基大小为 \(k\),那么这个区间合法当且仅当这个区间中有 \(2^k\) 个不同的数。那么 \(k\) 只有 \(\log n\) 个,考虑对于每个 \(k\) 算贡献,那么一个右端点的合法左端点一定是一段区间,由于左右端点都有单调性,可以双指针处理出这个区间,查询就是一个矩形内所有线段长度和,上半部分就是直接算,下半部分会截取一段,前缀和也能处理,边界二分来找即可。
0118
A. 破门而入
\(f_{i,j}=f_{i-1,j-1}+f_{i-1,j}(i-1)\),这个东西就是第一类斯特林数。
B. 翻转游戏
两头重一定会算重,减去就行。
C. 奶油蛋糕塔
建图后只有四个点,有三种情况,\(0,2,4\) 个奇度点,前两种可以直接找出欧拉路,第三种考虑删去一条边就行,注意不连通。
D. 多重影分身之术
二分贪心。
P7880 [Ynoi2006] rldcot
第一类支配对,发现本质不同的贡献只有 \(O(n)\) 种,然后如果 \(a<b<c,(a,c)=(a,b)\) 那么统计 \((a,c)\) 的同时一定统计了 \((a,b)\),这样就称 \((a,b)\) 支配了 \((a,c)\),启发式合并可以找出所有支配对,同时证明支配对最多只有 \(n\log n\) 种,然后就是矩形数颜色,可以只考虑一个颜色 \(r\) 最小的贡献,上扫描线即可,每次查就找有多少个小于 \(r\) 的端点。
0119
学了吉司机线段树,感觉就是懒标记线段树。
P4314 CPU 监控
赋值后的所有操作都相当于赋值操作,维护赋值标记即可。
P2305 [NOI2014] 购票
直接线段树套李超线段树,支持可撤销即可。不过有一个 trick 就是按出栈序为下标,这样每次根链就一定是一段后缀,不需要撤销了。
肉眼可见的效率低下
0120
A. 千岛之国
边长很小,发现每次扩展不到的都是右上角和左下角的矩形,根据这个记搜即可。
矩阵
首先能高消,然后根据第一行能得出所有,设 \(f_{i,j,k}\) 表示 \((i,j)\) 是否与 \((1,k)\) 有关系,最后一行必须全是 \(0\),然后根据 \(f\) 可以得出 \(n+m\) 个方程,高消 std::bitset 优化,\(O(\frac{n^3}{w})\)。
P10805 [CEOI2024] 加油站
点分治后上平衡树,狗都不写倍增。
0121
P6830 [IOI2020] 连接擎天树
诈骗题,先找联通块,在找环外连通块,然后每个联通块连成环即可,直接搜。
P4757 [CERC2014] Parades
度数小于等于 \(10\),设 \(f_s\) 表示当前子树每个儿子是否已经有出来的边的情况的最大贡献,\(dp_{i,j}\) 表示 \(i\) 子树 \(j\) 可以出来的最大贡献。
傻逼,你效率怎么这么低?年前必须上 200 紫
哈哈,年前没上

浙公网安备 33010602011771号