2017 Pre-summer Training I - Searching and Strings

B. 单词替换(KMP + Lazy标记)

Sample Input

3
aaa
a
b
aaa
aa
b
ababa
aba
cd

Sample Output

bbb
ba
cdba

Code:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 static const int MAXN = 5e6 + 10;
 4 bool vis[MAXN];
 5 char text[MAXN] = {‘\0‘};
 6 char pattern[MAXN] = {‘\0‘};
 7 char fuck[MAXN];
 8 int nxt[MAXN];
 9 int ans;
10 void GetNext(char* s , int len)
11 {
12     int j;
13     j = nxt[0] = -1;
14     for(int i = 1 ; i < len ; ++i)
15     {
16         while(j != -1 && s[i] != s[j + 1])
17             j = nxt[j];
18         if(s[i] == s[j + 1])
19             ++j;
20         nxt[i] = j;
21     }
22 }
23 void Kmp()
24 {
25     int n = strlen(text) , m = strlen(pattern);
26     GetNext(pattern , m);
27     int j = -1;
28     for(int i = 0 ; i < n ; ++i)
29     {
30         while(j != -1 && text[i] != pattern[j + 1])
31             j = nxt[j];
32         if(text[i] == pattern[j + 1])
33             ++j;
34         if(j == m - 1)
35         {
36             vis[i - m + 1] = 1;
37         }
38     }
39 }
40 int main()
41 {
42     int t;
43     scanf("%d" , &t);
44     while(t--)
45     {
46         ans = 0;
47         memset(nxt , 0 , sizeof(nxt));
48         memset(vis , 0 , sizeof(vis));
49         memset(pattern , ‘\0‘ , sizeof(pattern));
50         memset(text , ‘\0‘ , sizeof(text));
51         scanf(" %s" , text);
52         scanf(" %s" , pattern);
53         scanf(" %s" , fuck);
54         Kmp();
55         int n = strlen(text) , m = strlen(pattern);
56         for(int i = 0 ; i < n ; )
57         {
58             if(vis[i])
59             {
60                 printf("%s" , fuck);
61                 i += m;
62             }
63             else
64             {
65                 printf("%c" , text[i++]);
66             }
67         }
68
69         printf("\n");
70     }
71 }

时间: 2024-10-13 23:19:30

2017 Pre-summer Training I - Searching and Strings的相关文章

HDU 6170 - Two strings | 2017 ZJUT Multi-University Training 9

/* HDU 6170 - Two strings [ DP ] | 2017 ZJUT Multi-University Training 9 题意: 定义*可以匹配任意长度,.可以匹配任意字符,问两串是否匹配 分析: dp[i][j] 代表B[i] 到 A[j]全部匹配 然后根据三种匹配类型分类讨论,可以从i推到i+1 复杂度O(n^2) */ #include <bits/stdc++.h> using namespace std; const int N = 2505; int t;

HDU 6168 - Numbers | 2017 ZJUT Multi-University Training 9

/* HDU 6168 - Numbers [ 思维 ] | 2017 ZJUT Multi-University Training 9 题意: .... 分析: 全放入multiset 从小到大,慢慢筛 */ #include <bits/stdc++.h> using namespace std; const int N = 125250; int n, s[N]; int a[N], cnt; multiset<int> st; multiset<int>::it

SDKD 2017 Summer Team Training #12, tm--A(Queries )

题目大意: 给你一个数组,给你如下几种操作: s l r mod 查询区间[l,r]中模m等于mod的数字之和: + p r 将p位置的数加上r后模m: - p r 将p位置的数减去r后模m: 解题思路: 一般进行区间查询,位置操作可以使用线段树或者树状数组解决(暂时只会树状数组):这题的特殊之处就在于要求模m等值: 由于m的值较小(m<10) 因此我们可以开一个二重的树状数组,第二重保存模m后的值:其余操作就是基本的树状~ #include <iostream> #include &l

SDKD 2017 Summer Single Training #03

今天的题目有 6 个. 第一题: CodeForces - 400D  Dima and Bacteria 这个题实际是不难的,难的可能在题意的理解上还有题干有点长,这个题很考察题意上面,知识点很熟悉,并查集和Floyd. 具体题解地址:http://www.cnblogs.com/dwtfukgv/p/7126059.html 第二题:CodeForces - 384E  Propagating tree 这个题确实是有难度的,当然主要是在时间上面,其实这个我是防AK的,然后这个题很容易理解,

SDKD 2017 Summer Team Training #12, tm ( Yet Another Median Task )

题目大意:给定一个矩阵,给你多次查询,查询一个小矩阵中的数的中位数: 解题思路:完全没往二分上想,我们可以二分枚举中位数数值,搜索矩阵中数值小于中位数的个数. #include <cstdio> #include <iostream> #include <string.h> #include <string> #include <map> #include <queue> #include <vector> #includ

JavaScript使用正则表达式

2.0 简介 正则表达式是可以用来查找与给定模式匹配的文本的搜索模式.例如,在上一章中,我们在一个较长的字符串中查找子字符串Cookbook: var testValue = "This is the Cookbook's test string"; var subsValue = "Cookbook"; var iValue = testValue.indexOf(subsValue); //返回值12,即子字符串的索引 这段代码有效,因为我们要查找一个严格的匹配

JavaScript使用正則表達式

2.0 简单介绍 正則表達式是能够用来查找与给定模式匹配的文本的搜索模式.比如,在上一章中,我们在一个较长的字符串中查找子字符串Cookbook: var testValue = "This is the Cookbook's test string"; var subsValue = "Cookbook"; var iValue = testValue.indexOf(subsValue); //返回值12.即子字符串的索引 这段代码有效.由于我们要查找一个严格的

Dapper full example

Skip to content Sign up Sign in This repository Explore Features Enterprise Blog Watch 390 Star 2,538 Fork 844 StackExchange/dapper-dot-net branch: master dapper-dot-net/Tests/Tests.cs @mgravellmgravell 5 days ago SO30435185; make it clearer if the c

20162326 齐力锋 实验三

实验报告 课程:程序设计与数据结构班级: 1623 姓名: 齐力锋学号:2016232 成绩: 2分 指导教师:娄嘉鹏 王志强 实验日期:11月6日 密级:非密级 预习程度: 已预习 必修/选修: 必修 实验序号: 2326 实验一: 完成教材P302 Searching.Java ,P305 Sorting.java中方法的测试 不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位 提交运行结果图(可多张) 实验二: 重构你的代码 把So