CF1678A
小清新签到题,有0其余全与0合并,有相等的数先变为0再与0合并,没有相等的数先花1的代价合并为相等的数
CF1678B
因为最后对于一个合法的串,要求连续段长度为偶数,所以,我们只关心一个偶数位二元组 \((1,2),(3,4) \dots\) 两个对应的数是否相等
若不相等,我们只能把这个数对全改为0/1,但是我们并不知道怎么改更优
若相等,这个对就是不能改变的,因为把两个数都改变一定不优
所以对于第一问的答案,我们观察有多少个不相等的对即可
对于第二问的答案,我们会把中间不相等的段都改成其左或其右一段相等的段的数值,所以对于两个相邻的相等的二元组,若相同则对答案没有贡献,若相等则有1的贡献
特殊的,对于第一个相等的二元组也对答案有1的贡献,若所有二元组都不相等则整个串必须变为一个相等的0/1,所以答案为1
CF1678C
预处理题
我们考虑若只枚举b,c那么答案既是在 \((1,b-1)\) 之中比 \(p[c]\) 小的数乘上\((c+1,n)\)之中比 \(p[b]\) 小的数,我们先预处理出比 \(p[i]\)小的数的前缀和和后缀和,就可以 \(O(n^2)\) 求解了
CF1678D
挺好玩的一道题
首先行和列分开考虑,不用算什么容斥(我没有想出来)
考虑一列,来一个人并不会影响之前的人在列上的相对位置关系,只要这个列上以前没有1,现在有了,对于这一列的影响就会一直保存下去
考虑一行,虽然来一个人会影响一行的人数,但考虑如果进入m个学生之后,它的行的答案只与第一行有关
所以我们存一下对于每一行当余数为(0,m-1)时所对应的行数再加上第一行有没有数即可,如何判断第一行有没有,存一下上一次出现1的时间,若时间小于m则第一行存在1,在更新一下对应的答案值即可
最后答案为行列答案加和
标签:相等,二元,对于,题解,CF1678,第一行,答案,我们 From: https://www.cnblogs.com/zcxnb/p/18555992