poj2752 Seek the Name, Seek the Fame(next数组的运用)...
分类:
其他好文 时间:
2014-08-13 22:33:37
阅读次数:
320
代码1:i 从 1 开始#includeusing namespace std;const int maxn=8;//输入的字符个数int main(){ int i,j; int next[10]; char t[100]; for(i=1;i>t[i]; i=1; next[1]=0; j=.....
分类:
其他好文 时间:
2014-08-13 14:24:46
阅读次数:
247
KMP的应用。直接使用s1产生next 数组,然后在s2中搜索s1,那么记录最后一个搜索到的数值,就是s1的前缀在s2中的最长后缀了。
本题应该不能直接调用strstr了吧。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
...
分类:
其他好文 时间:
2014-08-12 19:09:14
阅读次数:
192
本题是KMP的next数组的灵活运用。
具体就是看最后整个数列的最后一个字母,能有多少前缀。
理解了next数组就很容易了。
#include
#include
#include
using std::vector;
const int MAX_N = 400001;
char name[MAX_N];
int next[MAX_N], len;
void genNext()
{
...
分类:
其他好文 时间:
2014-08-12 17:16:54
阅读次数:
237
KMP的应用,不过查找的时候注意一点就够了:查找到一个子串的时候,直接跳过整个串,而不是使用next数组前跳,因为根据题意需要剪出小饰条,小饰条之间不能重叠。
const int MAX_N = 1001;
char txt[MAX_N], pat[MAX_N];
int next[MAX_N], len;
void genNext()
{
for (int i = 1, j = 0...
分类:
其他好文 时间:
2014-08-12 17:11:34
阅读次数:
197
一道应用kmp算法中next数组的题目
这其中vis[i]从1加到n
vis[i]=[next[i]]+1;
#include
#include
#include
#include
#include
using namespace std;
char s[200005];
int b;
int next[200005];
int vis[200005];
void n...
分类:
其他好文 时间:
2014-08-08 09:42:11
阅读次数:
168
#include#includeint next[10005],lena,lenb;int a[1000005],b[10005];void set_naxt()//子串的next数组{ int i=0,j=-1; next[0]=-1; while(i<lenb) { ...
分类:
其他好文 时间:
2014-08-07 18:26:50
阅读次数:
227
这道题对更加深入地理解next数组有很大帮助。
基本思路:
字符编号从0开始,那么if(i%(i-next[i])==0),则i前面的串为一个轮回串,其中轮回子串出现i/(i-next[i])次。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358...
分类:
其他好文 时间:
2014-08-06 15:01:01
阅读次数:
190
题意是求第一个字符的前缀和后一个字符串的后缀最大的公共序列,并输出。。。
将两个字符串合并,求出kmp中的next数组就行,但要注意不要大于某个字符串的长度;
#include
#include
const int N = 50005;
#define min(a,b) ((a)
char s1[N], s2[N], s3[N * 2];
int next[N * 2];...
分类:
其他好文 时间:
2014-08-04 17:36:47
阅读次数:
207