热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2017PresummerTrainingISearchingandStrings

B.单词替换(KMP+Lazy标记)SampleInputSampleOutputCode:1#include2usingnamespacestd;3s

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

技术分享

Sample Input

3
aaa
a
b
aaa
aa
b
ababa
aba
cd

Sample Output

bbb
ba
cdba

 技术分享

Code:

技术分享技术分享
 1 #include 
 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 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 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 }
View Code

2017 Pre-summer Training I - Searching and Strings


推荐阅读
  • 本文介绍了如何通过Java代码计算一个整数的位数,并展示了多个基础编程示例,包括求和、平均分计算、条件判断等。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文介绍了如何通过在数据库表中增加一个字段来记录文章的访问次数,并提供了一个示例方法用于更新该字段值。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文详细介绍如何在 iOS 7 环境下申请苹果开发者账号,涵盖从访问开发者网站到最终激活账号的完整流程。包括选择个人或企业账号类型、付款方式及注意事项等。 ... [详细]
  • CentOS 系统管理基础
    本文介绍了如何在 CentOS 中查询系统版本、内核版本、位数以及磁盘分区的相关知识。通过这些命令,用户可以快速了解系统的配置和磁盘结构。 ... [详细]
  • Python notes
    6.1.1.执行模块当你用下面的方式运行一个Python模块pythonfibo.py模块中的代码将会被执行,就像导入它一样,不过此时__name__被设置为__main__。 ... [详细]
  • 本文探讨了过度依赖咖啡对生物钟的影响,以及如何合理划分学习和娱乐时间。通过反思,我们认识到即使是快乐的事情也需要适度,培养兴趣爱好应注重沉浸感和心流体验。文章还提供了一些具体的调整建议。 ... [详细]
  • 解决Spring Boot项目创建失败的问题
    在尝试创建新的Spring Boot项目时遇到了一些问题,具体表现为在项目创建过程中的两个关键步骤出现错误。本文将详细探讨这些问题及其解决方案。 ... [详细]
  • 本文详细解释了涨停板交易(俗称“打板”)的定义、操作步骤及注意事项。涨停板交易是一种高风险高回报的投资策略,尤其在牛市中表现出色。文中不仅介绍了如何选择和买入涨停股票,还提供了三大纪律以规避风险。 ... [详细]
  • Shell脚本中变量操作详解
    本文基于《鸟哥的Linux私房菜》一书,详细介绍了Shell脚本中变量的使用方法,包括变量的赋值规则、字符串处理技巧以及环境变量的管理等,旨在帮助读者更好地理解和使用Shell中的变量。 ... [详细]
author-avatar
George
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有