#include<iostream>
#include<string>
using namespace std;
int n,next[400008],result[400008];;
char s[400008],t[400008];
void Get_next()
{int j,k;
j=1;
k=0;
next[1]=0;
while(j<=n+1)
{ if(k==0 || s[j]==s[k])
{ j++;
k++;
next[j]=k;
}
else
k=next[k];
}
}
int main()
{ int i,k;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
while(scanf("%s",t)!=EOF)
{n=strlen(t);
for(i=1;i<=n;i++)
s[i]=t[i-1];
s[i]='#';
Get_next();
k=0;
result[k++]=n+1;
i=n+1;
while(i!=1)
{ if(next[i]!=1)
result[k++]=next[i];
i=next[i];
}
for(i=k-1;i>0;i--)
printf("%d ",result[i]-1);
printf("%d\n",result[i]-1);
}
return 0;
}
POJ 2752 C++ (KMP)
时间: 2024-12-30 22:30:38
POJ 2752 C++ (KMP)的相关文章
POJ 1961 C++ (KMP)
#include<iostream> using namespace std; int n,next[1000008]; char s[1000008]; void Get_next() {int j,k; j=1; k=0; next[1]=0; while(j<=n+1) { if(k==0 || s[j]==s[k]) { j++; k++; next[j]=k; } else k=next[k]; } } int main() { int i,cnt,k; freopen(&qu
POJ 1265 Area (计算几何)(Pick定理)
Area:http://poj.org/problem?id=1265 计算几何)(Pick定理)-poj1265"> 大意:每次给你一个点的横纵坐标变化值,求有多少点在多边形上,有多少点在多边形内,和多边形的面积. 思路:Pick定理. 一个计算点阵中顶点在格点上的多边形面积公式:S=a+b÷2-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积. 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Progr
POJ 3218 TOYS(计算几何)(二分)
TOYS:http://poj.org/problem?id=2318 大意:给你一个箱子,有n个挡板分隔成n+1部分,给你m个玩具的坐标,问每一部分有几个玩具. 思路:举对每个玩具,二分线段下标,判断玩具在线段左边还是右边,枚举后统计. 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/ #include <map> #include <stack> #include <queue>
POJ 1694 C++ (排序)
//不会敲,是偶看过别人的结题报告后敲的,学习下 #include<iostream> #include<algorithm> using namespace std; typedef struct Node { int label; int cnt; int leaf[200]; }; Node tree[200]; int solve(int i) { int stone[200],result,temp; if(tree[i].cnt==0) return 1; for(in
算法题:poj 3080 Blue Jeans(KMP匹配,枚举子串)
链接: http://poj.org/problem?id=3080 题目大意: 给出m(2<=m<=10)个DNA序列, 求出这m个序列中最长的公共字串.如果有多个相同长度的, 输出字典序最小的. 分析与总结: 依次枚举所有的子串, 然后再看是否在所有序列中都能够匹配.保存下长度最大且字典序最小的序 列. 代码: #include<iostream> #include<cstdio> #include<cstring> using namespace st
大话数据结构十一:字符串的模式匹配(KMP算法)
1. KMP算法简介: kmp算法是一种改进的字符串匹配算法,相比朴素算法,KMP算法预先计算出了一个哈希表,用来指导在匹配过程中匹配失败后尝试下次匹配的起始位置,以此避免重复的读入和匹配过程.这个哈希表被称为"部分匹配值表"(Particial match table),这种设计是KMP算法最精妙之处. 2. KMP算法分析: 下面以阮一峰老师博客中的一篇文章来分析KMP算法的原理:有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否
【OJ】贪心法 Fence Repair POJ 3253 	霍夫曼(Huffman)编码原理 acmclub 12326
题目链接:点击打开链接 /* 贪心法 Fence Repair POJ 3253 霍夫曼(Huffman)编码原理 */ #include<iostream> #include<algorithm> typedef long long LL; using namespace std; int l[50010]; int main(){ int j,m=0,n;cin>>n; LL s=0,ans=0; for(int i=0;i<n;i++)cin>>
数据结构例程——串的模式匹配(KMP算法)
本文针对数据结构基础系列网络课程(4):串中第5课时串的模式匹配(KMP算法). 问题:串的模式匹配 KMP算法: #include <stdio.h> #include "sqString.h" void GetNext(SqString t,int next[]) /*由模式串t求出next值*/ { int j,k; j=0; k=-1; next[0]=-1; while (j<t.length-1) { if (k==-1 || t.data[j]==t.d
字符串匹配的KMP算法(转)
字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一.它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth. 这种算法不太容易理解,网上有很多解释,但读起来都很费劲.直到读到Jake Boxer的文章,我才真正理解这种算法.下面,我用自己的语言