Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

Codeforces Round #220 (Div. 2) ABCD

$
0
0

题目链接

代码链接

A:

从点s能走到点t必须满足他们的x坐标之差是a的倍数,y坐标之差是b的倍数,并且这两个倍数之差是偶数(如果是奇数一定无法到达t点),然后还要判断是否s点在x维或y维是否有活动范围,如果一步都无法跨出显然也是不行的。枚举4个角落作为t点取最小值即可。

B:

这道我写的dp。设状态f[N][2]表示到第i个数为止,第i个数还能否用于后面的合并,的最大合并数量以及最大合并数量对应的方法数,开一个pair<int,lld>保存。则:

f[i][0] = f[i-1][1]   (s[i]+s[i-1]==9)

f[i][1] = f[i-1][1]+f[i-1][0]

答案为 (f[len][0]+f[len[1]]).second

这里的'+'号看做两个状态的合并。由于没有‘0’,所以不需要对9特殊处理。

C:

题目说明了如果有环应该怎样处理,那么完全就当作无环DAG来考虑问题就很简单了,dfs记忆化以每个格子作为起点时的最大值。

D:

由于每个节点最多只会被增删一次,最多100W个节点。增删操作,因此用Treap就足够了。貌似他们都是二分+树状数组AC的,代码简短有力高大威武啊。

作者:z286830682 发表于2013-12-21 0:39:58 原文链接
阅读:118 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>