原題鏈結
思路比較簡單。把原串擴大一倍,然後以原串為模板串,用擴充套件kmp演算法求出每個位置的最大字首即可。(wa了一天了,也不知道改了哪個地方就對了…………)
#include#include#define maxl1000100
using namespace std;
char s1[maxl*2],s2[maxl*2];
intlen,pre[maxl],temp;
void getpre(char*s)
temp=len%(len-pre[len])==0?len/(len-pre[len]):1;
s[len]='\0';
}void getst()
getpre(s1);
for(int i=len;i<2*len;i++)s2[i]=s1[i-len];
s2[2*len]='\0';
}int f[maxl];
void getf(char*s,int*f)
int k=1;
for(int i=2;i<=len;i++)
}
}int ex[maxl];
void exkmp(char*t,char*p)
int k=1;
for(int i=2;i}
}int main()
return
0;}
hdu4333 擴充套件kmp
題意 給定乙個數字 10 100000,一次將該數的第一位放到放到最後一位,求所有組成的不同的數比原數小的個數,相等的個數,大的個數 分析 由於輸入的數太大了,只能當作字串處理,將輸入的原串貼上在後面,這樣就可以對原串進行ekmp,最終只要統計從第i個位置開始的extend i 如果 len則從第i...
Hdu 4333(擴充套件KMP)
2014 12 17 01 34 48 思路 仔細思考,發現如果用擴充套件kmp,求出每個位置到末尾的最大字首匹配長度,比如1 100,位置50能匹配到75,那麼當我們把50 100移動到開頭。前25個字元是一樣的,需要比較的是第26個字元 也就是移動前的第76個字元 所以如果設next i 為位置...
擴充套件KMP演算法
擴充套件kmp 求出a i.lena 1 與b的最長公共字首長度,記為ex i 或者說,ex i 為滿足a i.i z 1 b 0.z 1 的最大的z值 擴充套件kmp可以用來解決很多字串問題,如求乙個字串的最長回文子串和最長重複子串。演算法 設next i 為滿足b i.i z 1 b 0.z 1...