这是本文档旧的修订版!
2020牛客暑期多校训练营(第一场)CJY G XX C
2020牛客暑期多校训练营(第二场)Finish
2020牛客暑期多校训练营(第三场)CJY J/K ZRX I
2020牛客暑期多校训练营(第四场)CJY E/J XX G ZRX I
2020牛客暑期多校训练营(第五场)CJY G/J ZRX A/H
2020牛客暑期多校训练营(第六场)CJY D XX I ZRX F
2020牛客暑期多校训练营(第七场)CJY E XX F ZRX A/C
2020牛客暑期多校训练营(第八场)CJY D XX J ZRX B/C
2020牛客暑期多校训练营(第九场)CJY H XX G ZRX L
2020牛客暑期多校训练营(第十场)CJY G/H XX B/D ZRX F
2020加赛1 CJY A/E XX B/C ZRX D
2020加赛2 CJY E
2015ICPC北京 CJY C XX D ZRX E (BFH)
可撤销并查集
2020.8.5 Codeforces Round #660
2020牛客多校训练营(第七场)I/J
2020牛客多校训练营(第八场)A
2019台大选拔赛 B/C
从二分图最大匹配到二分图最优匹配
2020.08.08 2020牛客暑期多校训练营(第九场)
2020.08.10 2020牛客暑期多校训练营(第十场)
2020.08.12 2015ICPC北京赛区
atcoder abc 171
atcoder abc 172
2020牛客暑期多校训练营(第四场)I
atcoder abc 171 F
atcoder abc 172 E
无
2020/08/12 codeforces 664
2020牛客暑期多校训练营2020(第8场) F/H
2020牛客暑期多校训练营2020第9场 A
2020牛客暑期多校训练营2020第10场 D
题意
atcoder abc 171 F
长度为n(⇐1e6)的只有26个小写字母的串,往进再插入k个(⇐1e6)个小写字母,能组成多少种不同的串。
思路:
考虑最终的串,先把n个本身的串插进去,然后要求如果有重复的话,要求本身的串插进去的必须是最后一个出现的位置。
所以枚举第一个字符插到i,前面是随便填的,$26^{i-1}$,然后其他n-1个就通过一个组合数知道了方案数,至于剩下的没有被插入的位置,由于我们规定了原字符是出现的最后一个位置,所有它后面到下一个字符出现前只有25种选法,所以再乘上25的剩下位置次方即可。
评论:
找到一个好的去重姿势
2020牛客多校训练营(第八场)A
题意
有n个粉丝,m个球员,每个球员都有若干粉丝,一个粉丝会看另外一个球员的比赛,要不是他说这个球员的粉丝,要不是它喜欢的球员有粉丝会
看这个球员的比赛,求最少选几个球员就可以使所有人都去看比赛。
思路:
显然这个是和连通块有关的问题,如果有一个粉丝是孤立的连通块,那么答案就是-1,否则答案就是连通块个数减去孤立孤立球员的个数。
维护图联通块的方法,采用LCT,或者离线可撤销并查集。对询问建线段树,把加边删边看成区间加边,然后把边放在线段树上,对这个线段树跑
dfs用可撤销并查集维护连通性。
评论:
做法比较神奇,这个是从对询问操作的考虑入手的。
来源:POI 2007
算法:贪心、进制拆分
题意:搬运n个砝码,有m个容器。任何两个砝码都有一个特征,他们的中总有一个的重量是另外一个的整数倍,当然他们也可能相等。($1 \le n, m \le 100000$) 。$w_{i}$,表示每个容器能够装的最大质量。($1 \le w_{i} \le 1000000000 $)。 $m_{j}$,表示每个砝码的质量。($1 \le m_{j} \le 1000000000$)。求最多可以带走多少个砝码。
思路:
注意条件:任意两个砝码中总有一个的重量是另外一个的整数倍。设最小的为x,则次小的可以写成xy,第三小的可以写成xyz,……以此类推。因此最多有$log_{2} max_{1 \le i \le n} m_{i}$个本质不同的砝码。
思考贪心策略
小的砝码必然要优先满足。如果一个容器能装下一个重量为kx的砝码,那么优先满足x的砝码,然后再满足kx的砝码。
进制拆分,按照砝码重量将容器的容积进行拆分。
例如:砝码 2 4 12, 容器18 = 12 * 1 + 4 * 1 + 2 * 1,13 = 12 * 1 + 剩下的不要了。
实现
找出本质不同的砝码,将所有容器的容量按照这些砝码进行拆分。拆分以后,统计所有容器拆出来每一位的数量。从小到大枚举砝码,如果这一位有,那么这一位的数量-1, 否则向高位借。
代码很简单,就不放代码了
P.S.少见的贪心题目,进制拆分的思想很巧妙。