留坑一个AGC010,做完了懒得更,难度也不是特别大,先咕着。
A
枚举哪个字符占领全部,每次相当于每个字符可以向前感染一个,把最后的字符去掉,直接模拟即可。
B
这种题WA两发也是醉了。
考虑两个人看见的颜色数不同,只有一种情况就是一个人是独有某种颜色,另一个人和别人共享颜色。
所以最大最小值只能差1,较小的一定是独有颜色,对于剩下的人和颜色,只要保证每种颜色至少有两个人即可。
注意特判剩下颜色数小于等于0的情况
C
被样例所蛊惑。
以为每个矩阵填右下角填个较大值,剩下的填1,然后被$1 5 1 4$hack掉了。
这个样例可以左右两端各填一个inf,中间填一个inf+1即可。
所以可以推广至矩形,在$1,1$开始填inf,$h,w$开始填inf+1,这样可以保证如果正的比负的多,那么一定有解。
其实如果满足$n,m$不同时被$h,w$整除,那么一定有解
D
可以发现一个显而易见的性质:每取出一个数是所有数异或和,再次取出的时候的值就是刚才被替换掉的那个值。
所以题意转化如下:$A$数组有$n+1$个数,$B$数组有$n$个数,从$A$中的指定的一个值开始,每次选择和一个值交换,直至AB两串相等。
不合法的情况很显然:B中有的数在A中没有出现过。
然后最小化方案,考虑建图,如果$A$中的$X$要变成$B$中的$Y$,相当于从$Y$向$X$连一条边,走过这条边相当于把$Y$变成$X$,然后现在手上的是$X$。
可以发现边数就是$AB$前$n$个元素不同的值的个数,要把所有边全部走过,最好情况就是直接有欧拉路,那么交换次数就是边数。
但是通过不合法的性质我们可以发现每个值的入度和出度差至多为1,因为前$n$个元素至多有一个不相同,故对于每个联通块一定都有欧拉路。
所以我们只要对不同联通块之间加一条边就可以满足要求了,答案是边数+联通块数-1
注意一个特殊情况:如果$A$中刚开始指定的值在所有联通块中都没有出现过,需要多花费一步进入联通块。
E
难度其实和D差不多,属于那种比较烦但是可肝的题。
主要就是考虑钦定一个鸡永远不会死,那么遇到他的只能在碰到他的那一瞬间死掉,前面必须活着,然后向前递归:
对于在我死之前遇到我的,必须死,对于在我死之后遇到我的,则更新对方的最晚死亡时间。
注意递归的时候可能会出现矛盾的情况,那么无论如何这只鸡也活不下去了。