作业备忘录
我的两道题
### agc005_c Tree Restoring
考虑必须存在一条最长链,这个直接用最大值构造就好了,剩下的值只要在(最小值,最大值]里面就行了。
### agc016_f Games on DAG
显然考虑sg函数。一开始考虑了两种状压方法,分别是从后往前直接压,和分层从sg=0开始压。然后发现第一种显然不好压,第二种也是新加一层要考虑和之前所有层的连通性。然后发现倒过来从sg最大的一层开始压似乎就可以了,这样新添加一层只要保证这层内部没有联通,也就是这一部分都=0,之前的部分都至少有一个边连过来使得sg+1就行了。另外并不需要记录sg[1]和sg[2],只要记录是否相同就行了。
wyy的
### agc006_c Rabbit exercise
显然问题直接等价于每次做Xi=Xi+1+Xi-1-Xi的变换,这里十分显然。
然后这种奇怪的变换范围小就构造矩阵,范围大就考虑差分前缀和等,这里可以发现是等价于交互差分。
置换的快速幂我写的快速幂,跑到和on的差不多,on就是分解环然后直接转K次。
### agc014_e Blue and Red Tree
显然的做法是每次删掉一条边之后不能再有跨过这条边的路径了,所以直接维护只被经过一次的边并删除就可以。维护的时候有一些技巧。
另外一个做法就是考虑到最后一定是两点一条重边,不断迭代合并也行。
###agc012_d Colorful Balls
由于交换具有传递性,显然最后一定是一个联通块内可以任意交换。
考虑如何优化建图,同色内显然都连最小的点即可,异色的同时提出来最小点和次小点,可以发现最坏情况,最小点和次小点所在的颜色的其他点,也可以通过a->bmin->amin->b的方式联通。
###agc012_c Tautonym Puzzle
构造排列,使得上升子序列的数量是N,增量构造,首位插入+1,尾部插入*2
###arc063_e Integers on Tree
考虑从下向上可以预处理出来每个节点可行的范围,一定是一个区间+一个奇偶性,合并也非常简单。
###agc007_e Shilk and Travel
首先二分答案。
考虑一个完整的子树,一定是一条路径进去,然后遍历完,然后出去,考虑对于非叶子节点,一定是先进入某子树,然后跨入另外一棵。
可以对于一个子树可以预处理所有的合法的(a,b),表示进去的长度是a,出去的是b,内部的全部都不超过二分值,然后显然(a,b)可以维护成a单调增,b单调减的形式。
然后可以证明size(u)<=2min(size[l],size[r]),因此复杂度应当是启发式合并的复杂度。
### agc010_c Cleaning
显然n=2的时候直接判断是否相等。
否则一定可以提一个度数不为1的作为根。这样所有可以被操作的都是叶子。
考虑自下向上判断,对于一个点,可以求出来他有多少条向上的路径。根据一个节点所有的孩子的这个值,和他自身需要被经过多少次,也可以算出来他的值。剩下的就是考虑一堆数字两两配对最多能配多少对,易证如果最大值不超过一半,那么就能配出来一半下取整。
### agc005_f Many Easy Problems
重点考虑每条边的贡献,一旦一条边两端都有点,就对答案有1的贡献,直接卷积即可。
###agc013_c Ants on a Circle
蚂蚁的位置是经典的方法,碰撞看成穿过,注意到每次每只蚂蚁向右穿过L都会使得1号蚂蚁的绝对位置+1,统计这样的次数。
###agc002_f leftmost Ball
考虑向前构造序列,每次要么插入一种颜色,并保证现在的序列首位是这种颜色,要么插入一种白色的球,只要始终保证白色的球没有插入的颜色的数量多就可以保证是合法的数列。合并的时候组合数合并。
主要不要考虑具体的顺序,考虑相对顺序会简单很多。
###arc073_e Ball coloring
显然最小值和最大值要么同属于一种颜色,要么属于不同颜色。
属于不同颜色的直接做掉。
属于同一颜色的要么用twopoints要呢直接贪心,贪心的过程大致就是强制所有剩余的全部选择右端点,然后按照左端点的顺序逐渐取反,可以发现如果跳过一个取反是没有意义的。
### agc015_f Kenus the Ancient Greek
首先可以倒着生成,然后可以证明一开始一定从0 1开始,否则最后一定会比这样生成的大两倍,这样就可以多生成一步,可以证明到倒数第二步都不会太多,暴力搜索剪枝。
### agc002_e Cady Piles
首先可以排序变成一次把边界向上/向左移动一格,然后可以变成走方块。
注意到对角线的状态一定一样,直接求最 右上的即可。
### arc074_e RGB Sequence
直接dp维护3种颜色最近出现的位置,一种颜色一定是最末尾的,所以省掉一维。
### arc072_e Alice in linear land
首先如果1到i-1的操作使得他的位置现在在p,那么自由修改di的能力是能让他在[0,p]中,所以考虑维护后缀不能达到的最小值,如果i+1不能达到的最小值<=di的一半,那么可以直接不变,因为在那个位置这个操作无法生效,否则就得增大di。反证可以证明这样一定能够得到最小位置。
### agc008_f Black Radius
考虑如果全1的情况,如果一个位置的d长度能够在其他位置被更小的表示出来就认为这个表示是无效的。考虑一个点能够表示出来哪些,首先不能达到上界,最远的点,齐次不能存在一个相邻的点,使得移动过去-1也行,大致就是外侧不能在-1之后还能碰到最远点。然后如果有些点不为1的话,就是还要考虑每个点哪些d能够在一个合法的地方表示出来,这个可以用下界来表示,转移类似上界。
## arc068_e Snuke Line
暴力枚举,暴力主席树查询。
### agc006_f Blackout
结论题完全不会,发现一个最小的完整的循环节长度是3,考虑将所有点按照%3分类,如果某一类不存在那么一定不连新边,如果有长度为3的链那么一定会有所有类型的点的。如果所有类都存在,那么长度差距为1的都可以连边,可以归纳证明。如果分类不成功,即有非3长度的环,那么直接所有点之间都可以连边。
### agc002_d Stamp Rally
无脑分治。
### arc077_f SS
发现如果循环节是刚好循环的话就是一直这样循环下去,如果不是的话成斐波那契字符串。
### arc080_e Young Maids
倒序贪心,线段树维护。
###agc004_d AND Grid
利用边界连接所有中间的,中间的交叉构造。
### agc009_d United
考虑将编号的规则转变为一条规则,任意两个相等的 level 中间必须有一个严格大于他们的 level。
证明的时候,可以考虑证明任何时刻,一个完整的联通块内一定有一个唯一的最大值,那么我们就直接干掉这个最大值就行了。
然后就是贪心的放置 level,考虑维护一个子树当前还有哪些level 其上没有更大的 level,称这些为可见的 level。
一个新的点能够放置的 level 必须大于所有子树对之间存在一样的level,然后不能同意是课件的 level,依次贪心放置最小的即可。
贪心的正确性不知道怎么证明。
### agc009_e Eternal Average
对应到k进制小数,变成 z 和 1-z 都能被有限个1表现
### agc014_d Black and White Tree
树的匹配
### agc012_f prefix medium
结论大概就是每个数字出现的位置至少要够成为那个时候的中位数,就是限制越来越严格。
然后就是每次只能不动,或者上下移动1,这里可以是新出现的数字。
倒过来考虑就是限制逐渐宽松,然后被跳过去的数字不能再出现了。
### agc011_c Squred number
### agc004_f Namori
把操作转化为,黑白染色,每次把黑推到白。
树直接计算每条边的经过的次数。
奇环是同加同减,直接做。
偶环设为变量,最后发现是一堆 abs(x +/- y) 等价于到一维点的距离。
### arc064_f rotated palindromes
一个串如果能被分割再合成回文串等价于是双回文。
考虑一个回文串能够搞出来多少串,答案是循环节的个数。
如果一个串是双回文,并且本身还是回文的,可以证明是由循环节构成的回文串。
直接容斥计数就行了。
### agc009_c Division into Two
直接优化DP
### agc14_c closed rooms
不要看错题
### agc015_d A or ... or B Problems
分为最高位不同的两个集合讨论。
###