codeforces 1600 分题目泛刷

本文为codeforces 1600分,顺序以过题人数为排序关键字的题目题解

目前已更新前50题

Problem - 431C - K-tree

标签:类似背包dp
思路:
  1. f[i][0/1]走到某一点时,表示总得分为i时,是否满足要求的路径
  2. 这一种分值可以从k种路线走过来,所以二重循环枚举 1 < j < m i n ( i , k ) 1<j<min(i,k) 1<j<min(i,k)
  3. 复杂度:O(n*k)

Good subarrays/1398/C

标签:数学推导
思路:
  1. 由原式可得: S r − S l − 1 = r − ( l − 1 ) S_r-S_{l-1}=r-(l-1) SrSl1=r(l1),进一步推导为 S r − r = S l − 1 − ( l − 1 ) S_r-r=S_{l-1}-(l-1) Srr=Sl1(l1),所以从前往后不断扫描记录 S i − i S_i-i Sii的相等情况即可。
  2. 复杂度:O(nlogn)

Problem - 371C - Hamburgers

标签:二分答案
思路:
  1. 如果是正向思考需要三个数字反复补缺,所以考虑验证答案。
  2. 于是可以每次验证是否能做这么多个汉堡来二分答案。
  3. 复杂度:O(logn)

Spreadsheet - CodeForces 1B - Virtual Judge (vjudge.net)

标签:进制转化

思路:

  1. 字母转化成数字毫无疑问,为26进制转化。
  2. 数字转化为字母,因为没有0,每个数字都是[1,26]。
  3. n u m = ∑ i = 0 n − 1 a i ∗ 2 6 i num=\sum_{i=0}^{n-1}a_i*26^i num=i=0n1ai26i
    => n u m = a 0 + ∑ i = 1 n − 1 a i ∗ 2 6 i num=a_0+\sum_{i=1}^{n-1}a_i*26^i num=a0+i=1n1ai26i a 0 a_0 a0系数为1,所以原式等价为此式子)
    => n u m − 1 = a 0 − 1 + ∑ i = 1 n − 1 a i ∗ 2 6 i num-1=a_0-1+\sum_{i=1}^{n-1}a_i*26^i num1=a01+i=1n1ai26i
    此时就转化为了26进制,不断除以26,就可以又得到 a i a_i ai
  4. 推荐文章:没有0的进制 - 何太狼 - 博客园 (cnblogs.com)

Problem - 377A - Maze

标签:一般dfs
思路:

1.直接dfs,当有一个格子无法继续延伸的时候,就可以将这个格子填充为X
2.这题样例略弱,写了个错的代码仍未被hack,有兴趣的可以来看看。(错误链接:Submission #250448284 - Codeforces

Problem - 1526C2 - Potions

标签:反悔贪心
思路:
  1. 如果到达某一个负数值的位置的时候, S S S小于了0,那么就去掉前面一个最小的负数。
  2. 可以使用优先队列实现该算法。

Problem - 1352G - Special permutation

标签:构造题
思路:
  1. 为了保证每个数字的间隔为2,所以可以想到分奇偶。
  2. 考虑对于3 1 4 2这个原式序列,如果在左边只放奇数,右边只放偶数,那么所形成的序列刚好满足要求

Problem - 1336A - Linova and kingdom

标签:树形dp
思路:
  1. 可以发现,从下到上设置关键节点是最优的。
  2. 其次如果将一个节点设置为关键节点,则会发现总权值将产生 d e p i − S i z i + 1 dep_i-Siz_{i}+1 depiSiz
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值