KMP
ID_BePosit
如果今天不比昨天多做一点什么,那么明天还有什么意义。
展开
-
Oulipo - (KPM-查子串可重叠-K=nxet[k])
Oulipo POJ - 3461 #include <iostream> #include <stdio.h> #include <cstring> using namespace std; #define maxn 1200025 int nxt[maxn*2],ans,t; char str1[maxn*2],str2[maxn]; void g...原创 2018-08-04 10:13:59 · 195 阅读 · 0 评论 -
最长回文 HDU - 3068 -Manacher
最长回文 HDU - 3068 以每个点 为中心的最长回文长度为 半径 -1 #include<bits/stdc++.h> using namespace std; #define maxn 123465 char str[maxn],cp[maxn*2]; int p[maxn*2],len,ans; void manacher() { int mx=0,i...原创 2018-12-29 12:22:59 · 311 阅读 · 0 评论 -
How many HDU - 2609 -最小表示法
How many HDU - 2609 思路:任何一个字符串环,最小表示都是唯一的。求出 n 个字符串环的最小表示,set统计种类即可。 #include<bits/stdc++.h> using namespace std; #define maxn 12345 set<string>ok; string hk; char str[maxn]; int...原创 2018-12-29 10:36:09 · 272 阅读 · 0 评论 -
Count the string HDU - 3336-NEXT应用-前缀出现次数
Count the string HDU - 3336 思路:首先 ans = n 是每个前缀出现一次,下面统计这些前缀作为枚举其中每个位置 作为后缀出现的次数求和即可。 这个题要求的 前缀 是包含本身的 ,但是next 中存的是 真后缀,不会重复计数。 #include<bits/stdc++.h> using namespace std; #define ...原创 2018-12-28 21:34:07 · 264 阅读 · 0 评论 -
Cyclic Nacklace HDU - 3746 -next -循环节
Cyclic Nacklace HDU - 3746 #include<bits/stdc++.h> using namespace std; #define maxn 123456 int nxt[maxn],len,t; char str[maxn]; void getnxt() { nxt[0]=0; for(int i=1; i<len; ...原创 2018-12-28 19:05:06 · 313 阅读 · 0 评论 -
Keywords Search HDU - 2222 -AC自动机
裸 #include<bits/stdc++.h> using namespace std; #define maxn 567891 int ans,cnt,nxt[maxn],t,n; int tree[maxn][32],bo[maxn]; void made(char *s) { int u=1,len=strlen(s); for(int i=0; i...原创 2018-12-26 20:58:03 · 256 阅读 · 2 评论 -
E - String of CCPC ZOJ - 思维+字符串
E - String of CCPC ZOJ - 3985 题意:一个连续的CCPC得到1元,然后你可以花钱买字母插入到字符串中,第i次买花i-1元钱。 挣的钱-花的钱,问最后得到的最价值 思路:分析的无论怎么加最好的情况为不破坏原来的产生一个新的所以只需看看第一次花0元的时候, 能不能有这种最好的情况就行了,先统计一下原来的CCPC数目,然后枚举3种内部情况三种边界情况 ...原创 2018-10-31 15:28:51 · 253 阅读 · 0 评论 -
E - Red Rover Gym -KMP-不重叠子串出现次数
E - Red Rover Gym - 101196E 题意:给你一个字符串s,让你找一个子串s1,把s中所有出现过的s1都替代成字符M,问你能使字符串s+s1变成多短,输出最短的长度 暴力所有字串kmp查询即可 #include<bits/stdc++.h> using namespace std; #define maxn 500 #define inf...原创 2018-10-21 10:04:06 · 408 阅读 · 0 评论 -
B - Ugly Number -最小表示法
B - Ugly Number Gym - 101875B 初始时,让i=0,j=1,k=0,其中i,j,k表示的是以i开头和以j开头的字符串的前k个字符相同 分为三种情况 1.如果str[i+k]==str[j+k] k++。 2.如果str[i+k] > str[j+k] i = i + k + 1,即最小表示不可能以str[i->i+k]开头。 3.如果s...原创 2018-09-27 17:14:46 · 445 阅读 · 0 评论 -
Glass Beads -最小表示模板
Glass Beads POJ - 1509 #include<iostream> using namespace std; int t,n; string str; int getmin() { int i=0,j=1,k=0; while(i<n&&j<n&&k<n) { ...原创 2018-10-01 15:04:21 · 258 阅读 · 0 评论 -
KMP应用—唯一一次
数据结构实验之串三:KMP应用 一定要记牢固next数组求得是子串的前后缀重复 #include<bits/stdc++.h> using namespace std; #define maxn 10001005 int nxt[maxn],n,m,cnt=0,x; int str[maxn],son[maxn]; void getnext() { int i...原创 2018-09-08 08:52:11 · 233 阅读 · 0 评论 -
F - Power Strings -next求循环节-
F - Power Strings POJ - 2406 ----------------------- k m x j i 由上,next【i】=j,两段红色的字符串相等(两个字符串完全相等),s[k....j]==s[m....i] 设s[x...j]=s[j....i](xj=ji) 则可得,以下简写字符串表达方式 kj=kx...原创 2018-08-16 20:05:20 · 144 阅读 · 0 评论 -
Sequence I (间隔p-KMP-由于kmp特点小于p)
#include<bits/stdc++.h> using namespace std; #define maxn 2000006 int nxt[maxn],a[maxn],b[maxn],n,m,p,T,ans; void getnxt() { int i=0,j=-1; nxt[0]=-1; while(i<m) { if(...原创 2018-08-08 11:00:21 · 144 阅读 · 0 评论 -
L - Substrings -KMP-substr-find
L - Substrings HDU - 1238 substr (C++语言函数) 编辑 substr是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。 题意 : 查找最长公共子串 ,可以从最小子串找起 ,并且可以查找逆序是否是别的串的子串。 注意最后若找不到输出0。 STL: #incl...原创 2018-08-15 09:17:26 · 238 阅读 · 0 评论 -
J - Count the string-next回溯
J - Count the string HDU - 3336 后缀ans+1,接着对next回溯一直到为0,相当于把子串里蕴含的前缀子串也找出来,举个例子: s a b a b a i 0 1 2 3 4 5 next[i] -1 0 0 1 2 ...原创 2018-08-11 09:37:48 · 315 阅读 · 0 评论 -
E - Period -HDU - i-Next[i]循环节
E - Period HDU - 1358 结论:j%(j-Nex[t])==0 说明该前缀是一个周期为j/(j-Next[j])的周期子序列 证明: j - Next[j] 是子串在失配时候的右移长度,说明在j位置失配的时候子串转移到next[j]处继续匹配,说明j之前的部分和next[j]之前的部分是相同的,也就是说j-Next[j] 是一个周期 #include<bits...原创 2018-08-10 21:11:47 · 185 阅读 · 0 评论 -
剪花布条 HDU - 2087 (KMP-不重叠查询-K归0)
剪花布条 HDU - 2087 #include<bits/stdc++.h> using namespace std; #define maxn 1005 char str[maxn],son[maxn]; int nt[maxn],len1,len2,ans; void getnext() { int i=0,j=-1; nt[0]=-1; ...原创 2018-08-04 16:50:17 · 157 阅读 · 0 评论 -
Simpsons’ Hidden Talents-(next数组)
Simpsons’ Hidden Talents HDU - 2594 题意前面一堆废话,就是问给出两个字符串s1和s2,问s1的前缀和s2的后缀最大匹配的数量, 这很容易让人想到KMP中求next数组的方法,所以这里可以把s1,s2连接起来,strcat(s1,s2)该函数的作用就是把s2连接到s1的末端 连接完之后就是对串s1进行求next代码详见kMP,接下来就是判断nex...原创 2018-08-04 09:47:53 · 162 阅读 · 0 评论