2017西安交大ACM小学期 神器插座 KMP匹配
神奇插座
发布时间: 2017年7月3日 11:27 最后更新: 2017年7月5日 13:46 时间限制: 500ms 内存限制: 128M
AA所在的国家有一项神奇的发明:插座。这里的插座不仅有两孔、三孔,而是有多种形态,下面用不同的小写字母表示不同的插座。插线板可以看做一排插座,因而下面用小写字母组成的字符串表示插线板。
该国家的用电器的插头也很特别,是由一串插头固定在一起的,下面用大写字母组成的字符串表示。只有插座和插头匹配,该用电器才能插在插线板上。例如:
插头ABCBA可以插在插线板abcbabcba上。
现在问题来了:给定插线板和插头,问该插线板上最多能插几个这样的插头?注意,这些插头不能重叠。
多组测试数据。
每组测试数据包含两行,第一行为插座,第二行为插头。
插座、插头对应的字符均不超过106。
总数据量不超过107个字符。
对每组数据,输出一行一个整数,表示答案。
abcbabcba ABCBA
1
解法非常简单,直接进行KMP匹配就可以了,但是KMP的模板要有一个小小的改动(因为这里题目要求插头不能重叠),那就是只要匹配到一个插头以后,直接置j = 0
这样可以避过重叠
代码:
#include <iostream>
#include <cstdio>
using namespace std;
#define MAXN 2000001
char s[MAXN];
char str[MAXN];
int fail[MAXN];
int search(char *str)
{int ans = 0;for (int i = 0, j = 0; str[i]; i++){while (j && str[i] - 'a' != s[j] - 'A')j = fail[j - 1];if (str[i] - 'a' == s[j] - 'A' && !s[++j]){ans++;j=0;}}return ans;
}void make_fail()
{for (int i = 1, j = 0; s[i]; i++){while (j && s[i] != s[j])j = fail[j - 1];if (s[i] == s[j])fail[i] = ++j;else fail[i] = 0;}
}
int main(){while(~scanf("%s %s",str,s)){make_fail();printf("%d\n",search(str));}return 0;
}
2017西安交大ACM小学期 神器插座 KMP匹配相关推荐
- 2017西安交大ACM小学期 美妙音乐[差分KMP匹配]
美妙音乐 发布时间: 2017年7月3日 13:14 最后更新: 2017年7月5日 13:47 时间限制: 500ms 内存限制: 128M 描述 一段音乐是由若干个音符组成的,音乐中的 ...
- 2017西安交大ACM小学期 敏感词汇[AC自动机]
敏感词汇 发布时间: 2017年7月5日 00:23 最后更新: 2017年7月6日 14:40 时间限制: 1500ms 内存限制: 128M 描述 我们知道,在进行聊天时,有些词汇是敏 ...
- 2017西安交大ACM小学期 选择困难症[折半枚举+二分查找]
选择困难症 发布时间: 2017年7月4日 12:44 最后更新: 2017年7月4日 12:45 时间限制: 5000ms 内存限制: 128M 描述 GG有严重的选择困难症. 早上起床 ...
- 2017西安交大ACM小学期 刷墙[折半枚举+异或]
刷墙 发布时间: 2017年7月3日 12:17 最后更新: 2017年7月6日 22:29 时间限制: 3000ms 内存限制: 128M 描述 小明有一面黑白混搭的墙,他想给把墙重新粉 ...
- 2017西安交大ACM小学期数论 [更新学号]
发布时间: 2017年6月24日 20:27 最后更新: 2017年7月3日 09:27 时间限制: 3000ms 内存限制: 128M 描述 某知名高校有n个学生,每个学生有一个唯一ID ...
- 2017西安交大ACM小学期数论 [水题]
水题 发布时间: 2017年6月25日 14:06 最后更新: 2017年7月3日 09:27 时间限制: 1000ms 内存限制: 128M 描述 平均因数个数的统计对于估算数论题目复杂 ...
- 2017西安交大ACM小学期 有趣异或[Trie树]
有趣异或 发布时间: 2017年7月4日 23:59 最后更新: 2017年7月5日 14:56 时间限制: 1500ms 内存限制: 512M 描述 给定n个非负整数,保证这些数两两不相 ...
- 2017西安交大ACM小学期 文本查找[AC自动机]
文本查找 发布时间: 2017年7月5日 00:10 最后更新: 2017年7月5日 13:47 时间限制: 1500ms 内存限制: 128M 描述 给定m种两两不同的关键词,并给定一段 ...
- 2017西安交大ACM小学期 毁灭序列[倒跑并查集]
毁灭序列 发布时间: 2017年7月4日 20:58 最后更新: 2017年7月6日 22:23 时间限制: 1000ms 内存限制: 512M 描述 给出一个n(1≤n≤2×105)个非 ...
最新文章
- SQL中Group By的使用详解
- Nginx配置文件详细说明
- 达拉草201771010105《面向对象程序设计(java)》第十六周学习总结
- spring mvc事务没有生效的原因
- 下一代Windows系统,Win11来了
- 平衡二叉树Python解法
- Python办公自动化,对文件进行自由操作
- 唏嘘!2019榜单出炉:铁打的Python连续3年第一,它居然跌出前十?
- 陶陶摘苹果(信息学奥赛一本通-T1103)
- 去超市一定要存包吗_大桥路某超市收银时出现多收现象!大家付完钱一定要核对...
- spring断言使用
- php dom xml解析,PHP使用DOM解析XML
- 1. crontab 简介
- jetty文件服务器,在Jetty中访问Web容器外部的文件
- Android 自动接听来电
- Access的BOM开发(2)基础信息
- 计算机键盘灯光怎么关闭,电脑关机键盘灯一直亮着解决方法
- android.dig机器人采访,机器人学导论心得 - osc_jjc36t9p的个人空间 - OSCHINA - 中文开源技术交流社区...
- 思科交换机路由器破解密码
- JVM(四).Class 文件结构(附字节码完整解析)
热门文章
- c语言 extern_Visual C++ 6.0环境中C语言extern 变量使用过程报错
- [mybatis]sqlSessionFactory.openSession()
- [JavaWeb-JavaScript]JavaScript_Function函数(方法)对象
- [PAT乙级]1043 输出PATest
- C++ class实现顺序栈(完整代码)
- http.ListenAndServe()到底做了什么?
- Docker容器实战思维
- Ubuntu上安装使用Docker
- exceptionhandler注解_SpringMVC 中 @ControllerAdvice 注解的三种使用场景!
- Java偏向锁、轻量级锁、重量级锁