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

Codeforces Round #501 (Div. 3)

时间:2020-09-17 22:17:50      阅读:29      评论:0      收藏:0      [点我收藏+]

标签:time   fail   差分   tween   kmp   上下   sum   没有   否则   

ABC咕咕咕

D. Walking Between Houses

\(n\) 个点第 \(i\) 个的坐标是 \(i\),一次操作可以从当前点走到任意另一个点,问能否走恰好 \(k\) 步,从 \(1\) 开始走,从 \(n\) 结束,距离和恰好 \(=s\),给出构造。

\(n \leq 10^9\)\(k \leq 2\times 10^5\)\(s \leq 10^{18}\)

题解:

首先奇偶性不对肯定走不到。

否则为了距离和能到 \(s\) 就在 \(1,n\) 之间反复横跳,直到再跳不合法。

然后一步一步走过去。

\(O(k)\)

E2. Stars Drawing (Hard Edition)

有一个 \(n\times m\) 的矩阵,由 .* 组成。

定义一个星星为从一个点上下左右各走 \(x>0\) 步路过的图形

如:

..*..
..*..
*****
..*..
..*..

问是否存在一些星星,使得它们的并集和原矩阵相等,给出构造。

\(n,m \leq 2000\)

题解:

对于每个点求出每个方向第一个 .*

这样就可以求出以每个点为中心的最大可能的星星的大小。

然后看这些星星的并集是否为原矩阵即可。

具体实现用差分,行加列加。

\(O(nm)\)

F. Bracket Substring

给定一个括号序列 \(s\),问有几个合法的长度 \(=2n\) 的括号序列存在一个子串是 \(s\),对 \(10^9+7\) 取模。

\(n\leq 100\)\(|s|\leq 200\)

题解:

\(dp_{i,j,k,0/1}\) 表示用了 \(i\) 个字符,和 \(s\) 匹配到 \(j\),目前左括号比右括号多 \(k\) 个,之前有没有子串是 \(s\) 的方案数。

转移的时候枚举这个位置填左括号还是右括号。

如果 \(k=0\) 不能填右括号,否则任意。

如果和 \(s\) 能匹配上,就转移到 \(j+1\),否则会失配,要 kmp 预处理 \(s\)\(fail\) 数组。

如果匹配到了第 \(|s|\) 位,最后一维就转移到 \(1\)

最终的答案是 \(\sum \limits _{j=0} ^{|s|} dp_{2n,j,0,1}\)

\(O(n^2|s|)\)

Codeforces Round #501 (Div. 3)

标签:time   fail   差分   tween   kmp   上下   sum   没有   否则   

原文地址:https://www.cnblogs.com/wangziji/p/13653322.html

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