codeforces 149E . Martian Strings kmp
给一个字符串s, n个字符串str。 令tmp为s中不重叠的两个连续子串合起来的结果, 顺序不能改变。问tmp能形成n个字符串中的几个。
初始将一个数组dp赋值为-1。
对str做kmp, 然后与串s进行匹配, 看哪些长度的串可以匹配到, 比如说匹配到了长度为j的串, 那么dp[j] = i, i是此时串s的位置。 然后将s和str都反转, 在做一次kmp, 在进行匹配, 对于匹配到的长度j, 看dp[lenStr-j]是否为-1, 如果不为-1, 看lenS-i是否大于等于dp[lenStr-j], 意思是这一部分在之前那一部分的右边。
语言表达能力好差................................感觉根本没有说清.还是看代码
- #include <iostream>
- #include <vector>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <cmath>
- #include <map>
- #include <set>
- #include <string>
- #include <queue>
- #include <stack>
- #include <bitset>
- using namespace std;
- #define pb(x) push_back(x)
- #define ll long long
- #define mk(x, y) make_pair(x, y)
- #define lson l, m, rt<<1
- #define mem(a) memset(a, 0, sizeof(a))
- #define rson m+1, r, rt<<1|1
- #define mem1(a) memset(a, -1, sizeof(a))
- #define mem2(a) memset(a, 0x3f, sizeof(a))
- #define rep(i, n, a) for(int i = a; i<n; i++)
- #define fi first
- #define se second
- typedef pair<int, int> pll;
- const double PI = acos(-1.0);
- const double eps = 1e-;
- const int mod = 1e9+;
- const int inf = ;
- const int dir[][] = { {-, }, {, }, {, -}, {, } };
- string s, str;
- int nextt[], dp[];
- void initKmp() {
- nextt[] = -;
- int i = , j = -, len = str.size();
- while(i<len) {
- if(j==-||str[i]==str[j])
- nextt[++i] = ++j;
- else
- j = nextt[j];
- }
- }
- int solve() {
- cin>>str;
- if(str.size()<=)
- return ;
- initKmp();
- mem1(dp);
- int i = , j = , len1 = s.size(), len2 = str.size();
- while(i<len1) {
- if(j==-||s[i]==str[j]) {
- i++, j++;
- } else {
- j = nextt[j];
- }
- if(j == len2)
- return ;
- if(j>=&&dp[j]==-)
- dp[j] = i;
- }
- reverse(s.begin(), s.end());
- reverse(str.begin(), str.end());
- initKmp();
- i = , j = ;
- while(i<len1) {
- if(j == - || s[i]==str[j]) {
- i++, j++;
- } else {
- j = nextt[j];
- }
- if(j>=&&dp[len2-j]!=- && dp[len2-j]<=len1-i) {
- reverse(s.begin(), s.end());
- return ;
- }
- }
- reverse(s.begin(), s.end());
- return ;
- }
- int main()
- {
- cin>>s;
- int n, ans = ;
- cin>>n;
- for(int i = ; i<n; i++) {
- ans += solve();
- }
- cout<<ans<<endl;
- return ;
- }
codeforces 149E . Martian Strings kmp的更多相关文章
- CodeForces 149E Martian Strings exkmp
Martian Strings 题解: 对于询问串, 我们可以从前往后先跑一遍exkmp. 然后在倒过来,从后往前跑一遍exkmp. 我们就可以记录下 对于每个正向匹配来说,最左边的点在哪里. 对于每 ...
- Codeforces 177G2 Fibonacci Strings KMP 矩阵
原文链接https://www.cnblogs.com/zhouzhendong/p/CF117G2.html 题目传送门 - CF177G2 题意 定义斐波那契字符串如下: $s_1="a ...
- Codeforces149E - Martian Strings(KMP)
题目大意 给定一个字符串T,接下来有n个字符串,对于每个字符串S,判断是否存在T[a-b]+T[c-d]=S(1 ≤ a ≤ b < c ≤ d ≤ length(T)) 题解 对于每个字符串S ...
- CF 149E Martian Strings 后缀自动机
这里给出来一个后缀自动机的题解. 考虑对 $s$ 的正串和反串分别建后缀自动机. 对于正串的每个节点维护 $endpos$ 的最小值. 对于反串的每个节点维护 $endpos$ 的最大值. 这两个东西 ...
- Codeforces 149 E. Martian Strings
正反两遍扩展KMP,维护公共长度为L时.出如今最左边和最右边的位置. . .. 然后枚举推断... E. Martian Strings time limit per test 2 seconds m ...
- xtu summer individual-4 D - Martian Strings
Martian Strings Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...
- POJ 2406 Power Strings (KMP)
Power Strings Time Limit: 3000MSMemory Limit: 65536K Total Submissions: 29663Accepted: 12387 Descrip ...
- poj 2406 Power Strings kmp算法
点击打开链接 Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 27368 Accepted: ...
- Power Strings(kmp妙解)
Power Strings Time Limit : 6000/3000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Tota ...
随机推荐
- 关于css3中before与after用单冒号还是双冒号的疑虑
在 CSS3 中为了区别伪元素和伪类为伪元素使用了双冒号,因此如果使用了 display 或者 width 等属性时使得显示脱离了原本元素后,建议按照标准双写.
- 前端制作中,IE6还有必要兼容吗?
国内市场对IE 6~7支持还有一定需求,但对于一个前端开发者,我们应该去推动这个行业向前发展,而不是一味迁就.妥协. 曾经,能够提供支持老版本 IE 是一个前端开发者的必备技能.随着移动互联网大潮来临 ...
- foreach真的比for性能高吗
void Main() { ; List<int> list=new List<int>(); ;i<count;i++) { list.Add(i); } List&l ...
- TFS跨版本Merge测试
原始文件Merge.txt Change Set Dev Beta #1 2014-9-25 10:49:13 ZDK 2014-9-25 10:49:13 ZDK #2 2014-9-25 10:4 ...
- Oracle基本代码学习
/*------------Orcale函数----------------*/ 1.字符函数 LOWER()小写UPPER()大写INITCAP()把第一个字母大写CONCAT()字符串的连接(也可 ...
- Matlab基础知识
一.常用命令:普通的如cd.ls和linux下一样 clc:清除工作窗口中的所有显示内容 clf:清除图形窗口 whos:列出当前工作空间中所有变量,以及它们的名字.尺寸(比如一个矩阵或数组的行列维数 ...
- javascript每日一练—运动
1.弹性运动 运动原理:加速运动+减速运动+摩擦运动: <!doctype html> <html> <head> <meta charset="u ...
- EasyUI在MVC4中需要部分刷新页面时load()后页面变形问题!
最近在使用MVC4与EasUI过程中遇到些容易导致界面变形的问题,纠结了很久,但其实当发现问题在哪里时,倒觉得最终还是自己对MVC4的概念没把握好,OK,show time. 本示例Contact ...
- C#实现微信开发
C#实现微信开发前奏 不想废话,直接写了!因为是留给自己做随笔的,所以大神们看到别喷…… 1.必须有微信公众账号 2.你也可以申请测试微信号,链接给你 http://mp.weixin.qq.co ...
- IOSJSBRIGE商品内容模板
<p> 内容 </p> <script> window.onerror = function(err) { log('window.onerror: ' + err ...