2021“MINIEYE杯”中国大学生算法设计超级联赛(8)
可能开学前补不完这场了。
军训期间补完了。
[1001 X-liked Counting]
solution
题面:一个数被称为好数,当且仅当存在一个它的前缀或后缀可以被
做法:直接算前缀或后缀不容易,于是想着算都不被整除,再用总数量减去它。总数量可以数位
都不被整除的方案计算,我们记录前缀的值,但此时不容易算后缀的值,于是我们再枚举总的值,利用总的值和前缀的值就可以算出后缀的值了,剩下的就是基本的数位
坑:当前缀已经是总长时,不能再算后缀了。
1 | //2021.9.1 by ljz |
[1002 Buying Snacks]
solution
题面:
做法:直接从组合意义下手,是枚举用了几个打折之类的,可以写出一串
考虑最基础的
转移是容易的,
这样就很简单了,设
其中
能不能再给力点?
其实完全是可以的。当我们将多项式看做一个向量时,它是可以使用特征方程的。于是对递推式做特征方程,非常容易地求出了
而我们要求的则是
然后你再冷静一下,发现分母的多项式长度是常数级别的,所以就可以
官方题解不知道为什么没写阳间的做法。
这题行末不加空格就错了,什么逆天。
1 | //2021.8.30 by ljz |
[1003 Ink on paper]
solution
题面:二维平面上
做法:最多连接
冷静一下就是
1 | //2021.8.29 by ljz |
[1004 Counting Stars]
solution
题面:三种操作,区间
做法:发现总共的
区间修改就用线段树直接维护,那只要对最高位特殊处理即可,复杂度就是
1 | //2021.8.29 by ljz |
[1005 Separated Number]
solution
题面:一个长度为
做法:我开始想的直接
实际上考虑每个点的贡献,枚举它在第
发现瓶颈在
当时廷廷问我这个怎么求,我也不知道为什么他不会(bushi)。
复杂度
1 | //2021.8.29 by ljz |
[1006 GCD Game]
solution
题面:两人在博弈,有
做法:平等博弈,直接求
1 | //2021.8.12 by ljz |
[1007 A Simple Problem]
solution
题面:一个长度为
做法:首先要注意到一个重要的性质,合并相邻区间的答案是可以二分的。
准确来说,我们想查找
重新回到这道题,利用上述二分,我们直接用动态开点线段树维护整个序列,合并时利用二分就可以做到
官方题解做法实在有点麻烦,它是将整个序列分成了每段长度为
实现上,为了减少下传标记的麻烦(因为有两种维护不同信息的线段树),我使用了标记永久化(其实是懒得写了,照抄了一下)。
1 | //2021.9.1 by ljz |
[1008 Square Card]
solution
题面:两个圆,随机丢一个长度为
做法:正方形肯定是正对着最好,那剩下来的就是圆的面积交。
1 | //2021.8.29 by ljz |
[1009 Singing Superstar]
solution
题面:一个长度为
做法:注意到小串长度小于等于
这些都用
1 | //2021.8.28 by ljz |
[1010 Yinyang]
solution
题面:每个点要么染成黑色要么染成白色,黑色和白色必须成一个连通块,同时一个小正方形不能为同一个颜色,问染色方案数。
做法:插头
注意一些基础的卡常技巧,比如三进制用四进制表示之类的。
1 | //2021.8.31 by ljz |