hdu4436 字尾自動機

2021-08-21 13:10:59 字數 1177 閱讀 8708

題解:求多個字串能夠構成多少種數然後把這些數去重後加起來,字尾自動機有個性質就是路徑數就等於不同子串個數,然後怎麼把多個字串拼接呢,兩個字串中間加入乙個你不會用的字元,因為這樣可以保證我到時候路徑不會走這條

#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define mes(a,b) memset(a,b,sizeof(a))

#define rep(i,a,b) for(int i = a; i <= b; i++)

#define dec(i,a,b) for(int i = b; i >= a; i--)

#define fi first

#define se second

#define ls rt<<1

#define rs rt<<1|1

#define lson ls,l,mid

#define rson rs,mid+1,r

#define lowbit(x) x&(-x)

typedef double db;

typedef long long int ll;

typedef pairpii;

typedef unsigned long long ull;

const ll inf = 0x3f3f3f3f;

const int mx = 2e5+3e4;

const int mod = 1e9+7;

const int x_move = ;

const int y_move = ;

int n,m;

struct sam

void init()

void insert(int c)

}last = np;

}void rsort()

void solve()

}printf("%d\n",ans);

}}word;

char str[mx];

int main()

word.rsort();

word.solve();

}return 0;

}

字尾陣列 HDU 4436

做法 首先應用求不同子串的演算法,自然想到字尾陣列,然後就是要統計以非 0 開始的字尾。考慮字尾 akak 1ak 2.an tmp 0 ak 0 tmp i tmp i 1 10 ai 0 sum i sum i 1 tmp i 那麼 以 am開始的字首和就是 sum n sum m 1 tmp ...

hdu 4436 str2int 字尾自動機

hdu 4436 str2int 字尾自動機 題意 給出n個數字,數字很長,用字串讀入,長度總和為10 5。求這n個字串的所有子串 不重複 的和取模2012 解題思路 字尾自動機。因為要處理所有不同的子串,所以想到字尾自動機。將所有的串乙個個建進去,用乙個10去間隔開來。建好之後,我們要統計和了。字...

HDU 4436 str2int(字尾自動機)

題意 給出一些數字串,每個數字串可以分成若干數字,比如123可以分成1,2,3,12,23,123。求所有數字串分成的數字的集合的和。思路 字尾自動機 串之間用數字10隔開,建立自動機。節點p和數字j得到的子節點q,q cnt p cnt,q sum p sum 10 p cnt j。const i...