SDOI2016 生成魔咒(字尾自動機)

2022-05-19 20:31:00 字數 674 閱讀 6663

看一眼題。本質不同的字串數。

嘴角微微上揚。

每一次加乙個數輸出乙個答案。

笑容漸漸消失。

等等,\(sam\)好像也可以求本質不同的字串。

設當前字串用\(x\)表示,每次插入完成後\(ans\)加上\(len[x]-len[fa]\)就行了。

嘴角微微上揚。

等等,炸空間了。

笑容漸漸消失。

用\(map\)不就得了。

嘴角再次上揚。

寫完過了。

笑出了聲。

翻題解,時看到了\(sa\)。

笑容漸漸僵硬。

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

#define int long long

const int n=101000;

int n,ans;

struct sam

void ins(int c)

} u=x;

}}sam;

int read()

while(ch>='0'&&ch<='9')

return sum*f;

}signed main()

return 0;

}

SDOI2016 生成魔咒

這是一道 sa 的練手好題 建議做之前先去做一下2408 之後你就肯定會做這道題了 首先上面那道題的答案就是 sum nn 1 sa i het i 就是對於每乙個字尾求出其能產生的子串,之後減掉和之前本質相同的子串 對於這個題,我們需要求出所有字首的本質不同的子串個數 先無腦敲上 sa 和 het...

SDOI2016 生成魔咒

魔咒串由許多魔咒字元組成,魔咒字元可以用數字表示。例如可以將魔咒字元 1 2 拼湊起來形成乙個魔咒串 1,2 乙個魔咒串 s 的非空字串被稱為魔咒串 s 的生成魔咒。例如 s 1,2,1 時,它的生成魔咒有 1 2 1,2 2,1 1,2,1 五種。s 1,1,1 時,它的生成魔咒有 1 1,1 1...

SDOI2016 生成魔咒

魔咒串由許多魔咒字元組成,魔咒字元可以用數字表示。例如可以將魔咒字元 1 2 拼湊起來形成乙個魔咒串 1,2 乙個魔咒串 s 的非空字串被稱為魔咒串 s 的生成魔咒。例如 s 1,2,1 時,它的生成魔咒有 1 2 1,2 2,1 1,2,1 五種。s 1,1,1 時,它的生成魔咒有 1 1,1 1...