P4070 SDOI2016 生成魔咒

2022-07-20 04:24:10 字數 1092 閱讀 1826

魔咒串由許多魔咒字元組成,魔咒字元可以用數字表示。例如可以將魔咒字元 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,1,1] 三種。最初 s 為空串。共進行 n 次操作,每次操作是在 s 的結尾加入乙個魔咒字元。每次操作後都需要求出,當前的魔咒串 s 共有多少種生成魔咒。

第一行乙個整數 n。

第二行 n 個數,第 i 個數表示第 i 次操作加入的魔咒字元。

輸出 n 行,每行乙個數。第 i 行的數表示第 i 次操作後 s 的生成魔咒數量

7

1 2 3 3 3 1 2

136

9121722

對於%10的資料,\(1 \le n \le 10\)

對於%30的資料,\(1 \le n \le 100\)

對於%60的資料,\(1 \le n \le 100\)

對於%100的資料,\(1 \le n \le 100000\)

用來表示魔咒字元的數字 x 滿足\(1 \le n \le 10^9\)

sam 大水題

題目相當於問你乙個串,每加進乙個字元,詢問當前不同字串個數

用sam統計就行了

#includeusing namespace std;

#define ll long long

ll in()

const int maxn = 2e5 + 5;

struct sam

}; node *root, *tail, *lst;

node pool[maxn];

void clr()

public:

sam()

node *extend(int c)

return lst = o;

}}sam;

int main()

return 0;

}

P4070 SDOI2016 生成魔咒(SAM)

題意 一開始有乙個空陣列,n次操作,每次操作都是在陣列的末尾追加乙個數x,要求操作之後輸出陣列中本質不同的子陣列數量。資料範圍 n 1e5,1 x 1e9 解法 本質不同子串容易想到sam,本質不同的子串數量 sum l i l fa i 每次插入乙個新數的時候,設新節點為np,那麼答案累加l np...

P4070 SDOI2016 生成魔咒 解題報告

link 一開始給乙個空串 s ss,每次在其最後加入乙個字元 x xx,詢問每次加入後 s ss 的本質不同的非空子串的個數。s 105 1 x 109 s le 10 5,1 le x le 10 9.s 10 5,1 x 10 9.具體地說,加入乙個字元 x xx 得到的貢獻就為 len np...

LG4070 SDOI2016 生成魔咒

洛谷 sum i.len i.fa.len 那麼產生的貢獻就是 last.len last.fa.len 與 yyb 的對話 q 為什麼構建自動機時中間過程新加的點不會算到最後答案中呢?a 不影響答案啊,你在兩個len之間斷開,對於答案的貢獻不變。include include include in...