标签:time fail 差分 tween kmp 上下 sum 没有 否则
ABC咕咕咕
有 \(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)\)
有一个 \(n\times m\) 的矩阵,由 .
和 *
组成。
定义一个星星为从一个点上下左右各走 \(x>0\) 步路过的图形
如:
..*..
..*..
*****
..*..
..*..
问是否存在一些星星,使得它们的并集和原矩阵相等,给出构造。
\(n,m \leq 2000\)
题解:
对于每个点求出每个方向第一个 .
和 *
。
这样就可以求出以每个点为中心的最大可能的星星的大小。
然后看这些星星的并集是否为原矩阵即可。
具体实现用差分,行加列加。
\(O(nm)\)
给定一个括号序列 \(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