時間限制:5000ms
單點時限:1000ms
記憶體限制:256mb
描述小hi平時的一大興趣愛好就是演奏鋼琴。我們知道乙個**旋律被表示為長度為 n 的數構成的數列。小hi在練習過很多曲子以後發現很多作品中的旋律有共同的部分。
旋律是一段連續的數列,如果同一段旋律在作品a和作品b中同時出現過,這段旋律就是a和b共同的部分,比如在abab 在 bababab 和 cabacababc 中都出現過。小hi想知道兩部作品的共同旋律最長是多少?
輸入共兩行。一行乙個僅包含小寫字母的字串。字串長度不超過 100000。
輸出一行乙個整數,表示答案。
樣例輸入
abcdefg樣例輸出abacabca
3
#include#include#include
#include
#include
using
namespace
std;
const
int maxn=210000
;int
rank[maxn],cnta[maxn],cntb[maxn],a[maxn],b[maxn];
intsa[maxn],tsa[maxn],ht[maxn];
intans,n,ch[maxn];
char
str1[maxn],str2[maxn];
void
solve()
for(int l=1;rank[sa[n]]1
)
}for (i=1,j=0;i<=n;i++)
}int
main()
printf(
"%d\n
",ans);
return0;
}
沒有找到原因,開始用字串一直錯,改成陣列就ac了。也不知道為什麼。過幾天再看看吧。
hihocoder1415 字尾陣列三 重複旋律3
傳送門 題解 考慮求出兩串合在一起 中間加分隔符 字尾陣列,就是要求任意在兩個串中的 i,j min i leq k leq j 的最大值。考慮 i,j 一定是滿足 i j 1 且合法的時候最優。詳情見 hihocoder 解題方法提示 include include include include...
hihocoder 字尾陣列
時間限制 5000ms 單點時限 1000ms 記憶體限制 256mb 描述小hi平時的一大興趣愛好就是演奏鋼琴。我們知道乙個 旋律被表示為長度為 n 的數構成的數列。小hi在練習過很多曲子以後發現很多作品自身包含一樣的旋律。旋律是一段連續的數列,相似的旋律在原數列可重疊。比如在1 2 3 2 3 ...
hihocoder1465 字尾自動機 迴圈同構
hihocoder1465 描述小hi平時的一大興趣愛好就是演奏鋼琴。我們知道一段 旋律可以被表示為一段數構成的數列。小hi發現旋律可以迴圈,每次把一段旋律裡面最前面乙個音換到最後面就成為了原旋律的 迴圈相似旋律 還可以對 迴圈相似旋律 進行相同的變換能繼續得到原串的 迴圈相似旋律 小hi對此產生了...