这一题改一改$KMP$算法就可以过了,但是你需要对KMP有足够的了解。 先膜一波$AC$自动机和字符串$Hash$的大佬。 $O(n)$开了$O_2$优化后进了第三(截至目前),跑的还是挺快的。 $KMP$问题的核心在于数组$next$(或者$pre$/$fail$,各种叫法),几乎所有的此类型题都 ...
分类:
编程语言 时间:
2018-09-22 21:13:44
阅读次数:
152
有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程。将s中的每一个字符压入栈暴力将s中的字符和t中的一个一个匹配,若能够匹配若不能匹配,我们利用next数组转移匹配的位置同时我们利用另一个栈来存 ...
分类:
其他好文 时间:
2018-07-06 18:57:52
阅读次数:
115
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int M=1000055; char stack[M],s[M],t[M],f[M],next[M]; int len,top; vo ...
分类:
其他好文 时间:
2017-05-23 15:59:55
阅读次数:
130
bzoj3940[Usaco2015 Feb]Censoring 题意: 有一个S串和一大堆T串,不断地在S串里找最早出现的T串,然后将其删除。S串≤100000,T串总长度≤100000。 题解: 对所有T串建AC自动机,然后同bzoj3942。注意,本题的AC自动机必须利用所有fail函数建成一 ...
分类:
其他好文 时间:
2016-09-04 15:45:35
阅读次数:
167
bzoj3942[Usaco2015 Feb]Censoring 题意: 有一个S串和一个T串,不断地在S串里匹配T串,然后将其删除。S串、T串长度≤1000000。 题解: 用1、2两个栈,每次将S串的当前字符压入1栈,当前匹配到T串的位置压入2栈,如果匹配出一个T串,则让1、2栈中匹配T串的子串 ...
分类:
其他好文 时间:
2016-08-26 19:51:33
阅读次数:
378
【题目大意】 有一个匹配串和多个模式串,现在不断删去匹配串中的模式串,求出最后匹配串剩下的部分。 【思路】 众所周知,KMP的题往往对应着一道AC自动机quq。本题同BZOJ3942(KMP),这里改成AC自动机即可。 我一开始写了原始的AC自动机,写挂了。后来思考了一下,应当用Trie图,机智地1 ...
分类:
其他好文 时间:
2016-08-14 19:12:20
阅读次数:
209
AC自动机。嗯bzoj3940弱化版。水过去了(跑的慢啊QAQ。想了想可以用hash写。挖坑 3942: [Usaco2015 Feb]Censoring Description Farmer John has purchased a subscription to Good Hooveskeepi ...
分类:
其他好文 时间:
2016-07-30 22:36:40
阅读次数:
282
维护一个栈。。。如果栈顶出现了要被删除的字符串就全删掉就好了,判断的话。。。kmp就行了 1 /************************************************************** 2 Problem: 3942 3 User: rausen ...
分类:
其他好文 时间:
2015-04-16 00:58:00
阅读次数:
142
题意:
题意同BZOJ3942,不过要删除的串是多串
http://blog.csdn.net/vmurder/article/details/44959895
题解:
……思路一模一样,除了不用kmp用AC自动机
代码:
#include
#include
#include
#include
#include
#define N 101000
#define T 2...
分类:
其他好文 时间:
2015-04-09 17:39:58
阅读次数:
136
我猜的题意(已经AC):
有一个S串和一个T串,长度均小于1,000,0001,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程。
题解:
用 KMPKMP 判断当前U串最后一个字母加进来以后有多少字符匹配。
代码:
#include
#include
#include
#include
#define...
分类:
其他好文 时间:
2015-04-09 15:33:30
阅读次数:
127