日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > LA 3026(Period-MP算法)[Template:KMP]

LA 3026(Period-MP算法)[Template:KMP]

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-04-10 07:53:10 閱讀次數(shù):3323次

3026 - Period

Time limit: 3.000 seconds 

For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 ≤ i ≤ N) we want to know the largest K > 1 (if there is one) such that the prefix of S with length i can be written as AK , that is A concatenated K times, for some string A. Of course, we also want to know the period K.

Input 

The input file consists of several test cases. Each test case consists of two lines. The first one contains N (2 ≤ N ≤ 1 000 000) the size of the string S. The second line contains the string S. The input file ends with a line, having the number zero on it.

Output 

For each test case, output 'Test case #' and the consecutive test case number on a single line; then, for each prefix with length i that has a period K > 1, output the prefix size i and the period K separated by a single space; the prefix sizes must be in increasing order. Print a blank line after each test case.

Sample Input 

3
aaa
12
aabaabaabaab
0

Sample Output 

Test case #1
2 2
3 3

Test case #2
2 2
6 2
9 3
12 4

本題用了MP算法

明顯i能和f[i]匹配,那末字符串恰好可以連著等下去






#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<functional> #include<iostream> #include<cmath> #include<cctype> #include<ctime> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define ForD(i,n) for(int i=n;i;i--) #define RepD(i,n) for(int i=n;i>=0;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (x<<1) #define Rson ((x<<1)+1) #define MEM(a) memset(a,0,sizeof(a)); #define MEMI(a) memset(a,127,sizeof(a)); #define MEMi(a) memset(a,128,sizeof(a)); #define INF (2139062143) #define F (100000007) #define MAXN (1000000+10) typedef long long ll; ll mul(ll a,ll b){return (a*b)%F;} ll add(ll a,ll b){return (a+b)%F;} ll sub(ll a,ll b){return (a-b+(a-b)/F*F+F)%F;} void upd(ll &a,ll b){a=(a%F+b%F)%F;} // kmp class KMP { public: int f2[MAXN]; //字符串從0開(kāi)始,但是f[i]表示匹配第i個(gè)字符,前面留1個(gè) f[0]--a-->f[1]--...這樣的 char T2[MAXN],P2[MAXN]; //T is long,P is model str void mem(){MEM(f2) MEM(T2) MEM(P2) } int getFail(char *P=0,int* f=0) { if (P==0) P=P2;if (f==0) f=f2; int m=strlen(P); f[0]=f[1]=0; For(i,m⑴) { int j=f[i]; while(j&&P[i]!=P[j]) j=f[j]; f[i+1]= P[i] == P[j] ? j+1 : 0; } } int find(char* T=0,char* P=0,int* f=0) { if (T==0) T=T2;if (P==0) P=P2;if (f==0) f=f2; int n=strlen(T),m=strlen(P); getFail(P,f); int j=0; Rep(i,n) { while(j&&T[i]!=P[j]) j=f[j]; if (T[i]==P[j]) j++; if (j==m) return i-m+1; } } }S; int n; int main() { // freopen("la3026.in","r",stdin); // freopen(".out","w",stdout); int tt=0; while(scanf("%d%s",&n,S.P2)==2) { printf("Test case #%d ",++tt); S.getFail(S.P2,S.f2); Fork(i,2,n) { if (i%(i-S.f2[i])==0&&S.f2[i]) printf("%d %d ",i,i/(i-S.f2[i])); } putchar(' '); S.mem(); } return 0; }





生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 伊人操 | 精品久久99 | 日本色网址 | 国内久久 | 欧美日韩国产精品一区二区 | 成人做爰高潮免费视频 | 曰韩精品 | 国产成人小视频 | 国产伦精品一区二区三区精品视频 | 精品成人av一区二区在线播放 | www伊人 | 激情国产在线 | 久久密 | 人人射 | 久艹av| 国产a精品 | www.国产毛片| 久一久久| 精品一二三区在线观看 | 美女视频网站久久 | 91麻豆精品国产自产在线观看一区 | 国产成人精品久久二区二区91 | 九九美剧 | 亚洲精品久久久久久一区二区 | www.日韩大片 | 免费在线观看毛片 | 久久久久久久久久久网站 | 亚洲人成人一区二区在线观看 | 精品一区久久久 | 国产视频精品免费 | 精品在线一区二区三区 | 日韩精品免费在线观看 | 一本久久精品一区二区 | 波多野结衣一区二区三区 | 日韩精品在线观看一区 | 九九九九九九九伊人 | 久久成人一区 | 日韩成人精品 | 亚洲精品在线观看视频 | 999久久久国产999久久久 | 伦一理一级一a一片 |