2020/07/18——2020/07/24周报
团队训练
林星涵
专题
比赛
题目
*Codeforces Round 658 D - Unmerge
分类:贪心
题目大意:给你一个 &2*n& 的序列,问你能否将其分为两个长度为 $n$ 的序列,令其归并后的序列和原序列相同。
数据范围:多组数据,$t \le 1000$,$1 \le n \le 2000$
解题思路:我们可以发现,一个数后面如果连续出现比他小的数,那么他们必定是被分到一个序列中的,利用这个性质我们将大区间拆成多个长度不等的小区间做 0,1 背包看能否构成 $n$ 长度的序列即可。
Comment:利用归并性质进行贪心的题,思路较好。
陶吟翔
专题
比赛
题目
Codeforces Round 657 C - Choosing flowers
分类:贪心,二分,后缀和
题目大意:你要买$n$朵花,有$m$种可以买,每种无限多,每种花买第一朵有$a_i$的收益,之后每一朵都是$b_i$的收益,最大化收益
数据范围:多组数据,$T \le 1000$,$1 \le n,a_i,b_i \le 10^9$
解题思路:显然某种花要买很多,其他花要么不买要么买一个获得$a_i$,所以枚举哪种花买最多,然后把$a_i$排序一下在里面二分判断,需要一个后缀和进行优化,时间复杂度为$O(m \log m)$
Comment:比较明显的贪心题,有些细节需要单独注意
Codeforces Round 652 C - RationalLee
分类:贪心,思维
题目大意:你有$n$个数要给$k$个人,每个人严格给$w_i$个,每个人的收益是获得的数的最大值和最小值之和,最大化收益
数据范围:多组数据,$T \le 10^4$,$1 \le k,w_i \le n$,$w_1+w_2+ \ldots +w_k=n$,$\sum n \le 2 \times 10^5$
解题思路:贪心地想,如果$w_i=1$,那么肯定尽量给大的,如果$w_i > 1$,那么先给最大值和最小值,然后把剩下的尽量往小放,这样就可以使得大的尽量能够计算在收益中。
Comment:非常不错的贪心题,包含了特殊判断和贪心策略
Codeforces Round 652 D - TediousLee
分类:递推,预处理,思维
题目大意:初始为一个点,每个点如果没有儿子,就多一个儿子,如果有儿子就多2个儿子,有3个儿子就不会再改变每一步的时候每个不满足的点都会改变,问第$n$种状态不重复最多找几个爪子
数据范围:多组数据,$T \le 10^4$,$1 \le n \le 2 \times 10^6$
解题思路:从$n=3$时开始往后递推,每次上一个所在的爪子下移一位,上上次的每个爪子的两边会各出现一个爪子,并且每向下移动三次最顶上就会多一个爪子,所以递推式是$f[i] = f[i-1] + 2 \times f[i-2] + 4 \times (i\ mod\ 3==0)$
Comment:一道不错的递推思维题
郭衍培
专题
比赛
题目
本周推荐
林星涵:
===Codeforces Round 658 C2 - Prefix Flip (Hard Version)
题目大意
给两个0,1串 $a,b$ ,能进行的操作是将一个前缀的0,1交换并前后翻转,求从 $a$ 到 $b$ 的操作数不超过 $2*n$ 的序列。
数据范围
解题思路
此题构造思路较为清晰,如果原本相同,便不做改动,如果不同则看第一位是否相同,不同则直接翻转,否则先翻转第一位再翻转。
难点在于如何维护,涉及到区间翻转比较直接的想法是splay,但实际上由于该翻转操作的特殊性只要记录首尾进行交换等操作即可。
构造思路清晰,维护方式巧妙简洁。(而且我数组开小fst了。。。)
陶吟翔:
郭衍培:
题目大意
求长度为k,包含子序列s的,仅由小写字母构成的字符串个数。
数据范围
$1 \le |s|,k-|s| \le 2\times 10^6$
解题思路
设|s|=n。考虑字符串中字典序最小的s。设最后一位是第m位。之前的n-1位有$C_{m-1}^{n-1}$种,除这n-1个位置以外,其余m-n个位置,每个位置有25种选择(不能是它后面的那个字母,否则违反字典序最小)。而第m位往后的位置,每个位置有26种选择。因此最后一位是m的字符串有$C^{n-1}_{m-1}25^{m-n}26^{k-m}$种。枚举m即可。
很好的数学题,不好想,方法事实上很简洁。这种题做起来确实很舒爽。