Many Equal Substrings CodeForces - 1029A (kmp next陣列應用)
阿新 • • 發佈:2018-11-29
題目大意
題目看樣例也能猜到就是輸出最短的迴圈串。
吐槽
明明是div3第一題為啥子還會用到kmp的知識?
解法
這個題仔細看發現是求最長可去除的字尾,也就是說去除跟下一個相同的字串還能連線起來。這個不就是next陣列的功能嗎?最長公共前後綴。
公式:len-next[len]
我們把前k-1個字串只輸出前面的部分最後加上一個完整的字串即可
完整程式碼
#include <bits/stdc++.h> using namespace std; char a[500]; int nex[500]; int maxn=-1; void get() { int j=0; for(int i=2;i<=strlen(a+1);i++) { while(j&&a[i]!=a[j+1]) j=nex[j]; if(a[i]==a[j+1]) j++; nex[i]=j; } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,t; cin>>n>>t; cin>>a+1; get(); int ans=strlen(a+1)-nex[strlen(a+1)]; for(int i=0;i<t-1;i++) for(int j=1;j<=ans;j++) cout<<a[j]; cout<<a+1; }