退役后做题记录
我退役了
AGC030E Less than 3
神仙题Orz
首先,如果你修改了一个位置\(i\),那么\(i-1\),\(i+1\)一定不同,否则一定会出现连续三个一样的
将0和1之间插入一条红线,1和0之间插入一条蓝线。那么红蓝线一定交替出现
修改相当于移动一条线,移动方案相当于一个匹配(位置1以前、位置n以后可以看做有无数条红蓝交替的线)
最妙的是,“不能出现连续三个一样的”限制没有了(因为一定能找到方案)
枚举匹配的方案即可
https://atcoder.jp/contests/agc030/submissions/6933519
AGC029B Garbage Collector
首先,取垃圾的代价固定,为\(nX\),可以无视。
设取了\(K\)次垃圾,放垃圾代价就会是\(KX\)。
考虑一次取垃圾的过程,取了\(x_1<x_2<\ldots<x_s\)处的垃圾。
显然一定会先走到\(x_s\),然后返回途中收辣鸡。
推一下,代价会是\(5x_s+5x_{s-1}+7x_{s-2}+9x_{s-3}+\ldots+(2s+1)x_1\)。
收了\(K\)次辣鸡,会有\(2K\)个系数\(5\),\(K\)个系数\(7,9,11,\ldots\),可以任意乘给\(x\)
显然最大的\(2K\)个拿\(5\),以此类推,前缀和高高就行了
https://atcoder.jp/contests/agc027/submissions/6921358
AGC018C Coins
首先消去\(C\)。所有\(A,B\)变成\(A-C,B-C\),最后答案加\(\sum C\),就不需要取\(C\)了,只要取\(x\)个\(A\),\(y\)个\(B\)。
枚举一条分界线,左右都会从小到大取\(A/B\),用一个堆维护
https://agc018.contest.atcoder.jp/submissions/6918307
LOJ6294 touch
我是傻逼
先考虑\(\sum_{d|x}\mu(d)=[x=1]\),我们要求\(\sum_{path}\sum_{d|\gcd\{path\}}\mu(d)\),也就是对所有\(d\)求有多少条路径\(\gcd\)是其倍数
分开求跨过不确定边的路径和剩下的,不确定边把树分成了两棵树。
不跨过不确定边的路径直接求,枚举\(d\)后,只保留权值是\(d\)倍数的边。路径数是\(\sum \binom{siz}2\),并茶几维护即可
跨过不确定边的路径,\(u,v\)分出了两棵树,搜出两棵树所有点到\(u/v\)的\(\gcd\)。两棵树的\(\gcd\)记为数组\(A,B\)
那么如果不确定的边权为\(w\),这部分答案是\(\sum_{a\in A,b\in B,d|\gcd(a,b,w)}\mu(d)\)
设\(s_i=\sum_{a\in A,b\in B}[a|i][b|i]\)(注意0要特判)可以发现\(a\in A,b\in B\)会在\(\mathbb{lcm}(A,B)\)的倍数处计算一次。
那么如果\(i|w\),答案加上\(s_i\mu(i)\),就只会算一次了