SPOJ 1812 LCS2 字尾自動機 DP

2021-09-07 09:05:33 字數 1012 閱讀 6096

題意:

求多個串<=10的最長連續子串

乙個串建sam,然後其他串在上面走

每個狀態記錄所有串在這個狀態的公共子串的最小值

乙個串在上面走的時候記錄與每個狀態公共子串的最大值,注意出現次數向父親傳遞,乙個狀態能到達說明了suffix link指向的狀態可以取到最大子串,這一步對val後基數排序然後倒著更新就行了

注意兩點:

1.空間要開兩倍,基數排序用的東西也要兩倍哦

2.答案不能用mn[1]更新!!!!因為mn[1]沒有意義啊root狀態乙個子串也沒有還可能有某些bug

#include #include 

#include

#include

using

namespace

std;

const

int n=2e5+5

;int

n,m;

char

s[n];

struct

statet[n

<<1

];int

sz,root,last;

inline

int nw(int _)

void inisam()

void extend(int

c) }

last=np;

}int mx[n<<1],mn[n<<1

];void walk(char

s) }

}int c[n<<1],a[n<<1

],ans;

void radixsort(int

len)

void

solve()

}for(int i=2;i<=sz;i++) ans=max(ans,mn[i]);

printf("%d

",ans);

}int

main()

SPOJ1812 LCS2 字尾自動機

並沒有什麼想說的,但是要保持格式 w spoj lcs2傳送門 給出n個字串 n不超過10,每個串長不超過100000 求出這n個字串的最長公共子串 tip 子串是連續的,子串行是不連續的 輸入格式 一共n行,每行包含乙個字串 輸出格式 輸出一行乙個整數,表示最長公共子串 這是一道字尾自動姬的基礎應...

SPOJ 1812 LCS2 字尾自動機 DP

題意 求多個串 10的最長連續子串 乙個串建sam,然後其他串在上面走 每個狀態記錄所有串在這個狀態的公共子串的最小值 乙個串在上面走的時候記錄與每個狀態公共子串的最大值,注意出現次數向父親傳遞,乙個狀態能到達說明了suffix link指向的狀態可以取到最大子串,這一步對val後基數排序然後倒著更...

SPOJ 1811 LCS 字尾自動機

題意 求兩個串的最大連續子串 乙個串建sam,另乙個串在上面跑 注意如果走了suffix link,sum需要更新為t u val 1 suffix link有點像失配吧,當前狀態s走不了了就到suffix link指向的狀態fa上去,fa是s的字尾所以是可行的,並且有更多走的機會 include ...