【3.30】Codeforces 刷题

∗ 1300 − ∗ 1700 ^*1300 - ^*1700 13001700


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 1ain)和 k k k ,现在你可以在任意位置插入任意数量的数 1 ≤ b i ≤ n 1≤b_i≤n 1bin ,使得连续 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值