∗ 1300 − ∗ 1700 ^*1300 - ^*1700 ∗1300−∗1700
B. Random Teams
题意: n n n 个元素分配为 m m m 个非空组,每个组内元素两两连边,设边总和为 s u m sum sum 。问所有分配方案中 M a x ( s u m ) Max(sum) Max(sum) 和 M i n ( s u m ) Min(sum) Min(sum) 。
思路:可以证明:设 a , b a,b a,b 且 a < b a<b a<b , a a a 转移 1 1 1 到 b b b 中后边总和会非减。因此 M i n Min Min 就是尽量均摊, M a x Max Max 就是尽量撮合到一组中。
AC代码:https://codeforces.com/contest/478/submission/151400118
B. Phoenix and Beauty
题意:给定 n n n 个数( 1 ≤ a i ≤ n 1≤a_i≤n 1≤ai≤n)和 k k k ,现在你可以在任意位置插入任意数量的数 1 ≤ b i ≤ n 1≤b_i≤n 1≤bi≤n ,使得连续 k k k 个数的和都是一样的。如果不可以得到就输出 − 1 -1 −1 。可以构造的序列。
思路:思考后会发现一个性质:如果连续 k k k 个数的和都是一样的,那必然是序列周期为 k k k 。如果初始序列的元素种类 > k k k ,则无解。否则,看数据范围我们知道可以输出 n n n 次周期序列,这样能保证 a i a_i ai 会按顺序出现。
AC代码:https://codeforces.com/contest/1348/submission/151401860
B. Codeforces Subsequences
题意:构造一个字符串使得该字符串含有至少 k k k 个 " c o d e f o r c e s " "codeforces" "codeforces" 的子序列,且字符串长度尽可能小。
思路:
做之前看了一下 dp 求子序列数量,但是这题用不到。
我们尝试对每个字符原地增殖,则子序列数量可以用乘法原理计算。原字符串子序列计算: 1 × 1 × 1 × 1 × 1 × 1 × 1 × 1 × 1 × 1 1 \times 1 \times1 \times1 \times1 \times1 \times1 \times1 \times1 \times1 1×1×1×1×1×1×1×1×1×1,假如 ′ d ′ 'd' ′d′ 增殖为 3 个,则数量为 1 × 1 × 3 × . . . 1 \times 1 \times 3 \times ... 1×1×3×...
贪心来看,均摊增殖即可。
AC代码:https://codeforces.com/contest/1368/submission/151399072
D. Constructing the Array
思路:优先队列即可。
AC代码:https://codeforces.com/contest/1353/submission/151398410
D. Solve The Maze
题意:给定 n × m n \times m n×m 的方格,方格上有墙,空地,好人和坏人,你现在可以在空地上放墙堵住坏人,使得所有好人都能逃脱到 ( n , m ) (n,m) (n,m) 但是坏人不可以。如果可以输出 YES ,如果不行输出 NO。
思路:刚开始想要建拓扑图,发现不好做。
然后从好人开始研究,好人到终点可能有多条路径,但是如果某条路径上旁边有坏人,则这条路不能走,这条路上离坏人最近的点要封住。
那做法就是封住坏人,再看好人到终点是否有路径。
AC代码:https://codeforces.com/contest/1365/submission/151396132