题解
拍照
从和从分别跑一遍最长上升子序列,枚举最高的人时,计算和之和,取和最大的。(枚举最高的人时要保证被选到,所以要分别从前和从后跑一遍最长上升子序列
素数
明显的,对于能拆分出奇数个素数的数来说,它们两两之间要么互质,要么大数/小数为非素数。对能拆分出偶数个素数的数也是同理。
按拆分出的素数个数的奇偶把整数集合中的数分为两个集合,两个分别连接源点和汇点,商为质数的两个数连边。那么其实就是求这张图的最小割,然后答案就最小割。最小割最大流。
幸运
AC自动机+dp状态压缩板子题,这题的原题是:DNA Sequence
先讲原题
原题是多组输入
第一行输入和,
后面行,每行一个长度不超过10的字符串,只由构成
输出长度为且不包含这个字符串的字符串个数。
思路
这个图是例子,构建trie图后如图所示,从每个结点出发都有4条边
从状态0出发走一步有4种走法:
- 走A到状态1(安全);
- 走C到状态4(危险);
- 走T到状态0(安全);
- 走G到状态0(安全);
所以当n=1时,答案就是3
当n=2时,就是从状态0出发走2步,就形成一个长度为2的字符串,只要路径上没有经过危险结点,有几种走法,那么答案就是几种。依此类推走n步就形成长度为n的字符串。
matrix矩阵如下(矩阵i行j列的权值是结点i转移到结点j的方案数):
n=1
2 1 0 0 0
2 1 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
n=2
6 3 0 0 0
6 3 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
原题的代码改下模数以及字典树部分就行了。
摆花
从开始往后找空位,然后依次摆放盆花,输出这一轮摆的第一盆花和最后一盆花的下标,如果摆不下盆,输出,但是能摆下的还要摆。注意这几点后,二分第一盆花和最后一盆花的下标,用线段树维护区间有多少盆花。
涉及区间覆盖,区间查询。注意区间覆盖的值为0时标记的处理。
单车
对每个单车跑一遍bfs,找到任意一个单车到任意一个停车位的最短路。把单车和停车位分别看成一个集合,这就是一个裸的二分图最大权匹配。可以无脑上或者网络流的板子。
括号
时,我们可以直接枚举左端点,然后统计贡献,复杂度。原题连接:C. Compressed Bracket Sequence
的范围较大时,可以用栈去模拟括号匹配,然后分类讨论:
- 左括号数等于,右括号数等于
- 左括号数右括号数,贡献个合法匹配,看左边有多少对连续的连续的完美括号匹配,如果有对,那么又贡献个合法匹配,同时。eg,当前左右括号为,,对连续的完美括号匹配为,那么也是合法匹配。
- 左括号数右括号数,贡献个合法匹配,同时,当前只有一对连续的完美括号匹配。
- 左括号数右括号数,贡献个合法匹配,同时,看左边有多少对连续的连续的完美括号匹配,如果有对,那么又贡献个合法匹配,并继续分类讨论。