码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 补题记录

时间:2018-05-19 23:23:08      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:计数   有意思   处理   总结   round   预处理   顺序   选择   移动   

首先总结一下前段时间遇到过的一些有意思的题。

Round #474 (Div. 1 + Div. 2, combined)   Problem G

其实关键就是n这个数在排列中的位置。

这样对于一个排列,设$f[pos] = p$, 那么从位置$1$到位置$pos$最大值被刷新了$a$次,从位置$n$到位置$pos$最大值被刷新了$b$次。

去掉$n$之后,剩下$n-1$个数被分成了两个部分。

假设把这$n-1$个数分成$a+b-2$个组,分配给左边$a-1$个组,给右边$b-1$个组。

对于$n$左边的数,每个组内部一定满足第一个数最大,对于$n$右边的数,每个组内部一定满足最后一个数最大。

这样就满足了题意。

这样其实就是一个环排列计数,具体一点,就是求$n-1$个数划分成$a+b-2$个集合,每个集合内部再按特定顺序围圈分组的方法的数目。

这刚好是第一类斯特林数。那么答案为$C(a + b - 2, a - 1) * S(n - 1, a + b - 2)$。

 

Round #480 Div2  Problem E

去掉$k$个点,相当于保留$n - k$个点,需要满足剩下的$n - k$个点连通。转化为保留$m$个点,求留下的点的权值和最大。

以$n$为根(必选),从$n - 1$开始往前选,假设当前已经选了$x$个点,如果当前点往上爬,爬到第一个已经被选的点时的移动距离大于$m - x$,

那么不能选这个点(因为选了一个点就必须选他的祖先),否则就选入这个点,然后选择所有的他的祖先中未被选择的点

(也是一步步往上爬,到发现了被选中的点为止),到选了$m$个点为止结束即可。

 

Round #482 (Div. 2) Problem D

预处理出所有数的因子。加入一个数的时候在以他的所有倍数为编号的字典树中插入这个数,(字典树编号最大为$100$)

查询的时候如果$k$小等于$100$,那么在字典树里查询,否则直接暴力找。

Codeforces 补题记录

标签:计数   有意思   处理   总结   round   预处理   顺序   选择   移动   

原文地址:https://www.cnblogs.com/cxhscst2/p/9061855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!