AC自動機 西征羅馬之路

2021-06-30 16:18:40 字數 2281 閱讀 5407

水題再沒有愛了。。。

西征羅馬之路(roma.c/cpp/pas) 2s 128mb

【背景】

乙個偶然的機會(niabby出題),bob穿越到了三國時期,憑藉天時,地利,人和以及修改器,bob十年就成功統一了大陸版圖。接下來的五年中,bob不僅在南方平定了山越、南蠻之亂,東征邪馬台而勝,在西部更是將版圖擴張到了已被羅馬帝國征服的古波斯一帶。安定了內部環境後,為了爭奪歐亞大陸的唯一王座,也為了國家的榮耀,bob率領的精銳軍團即將和羅馬帝國現任皇帝alice,the grace of god,在戈蘭高地發動爭奪天下霸權的霸者之戰。

bob的軍隊中有機動力極高的輕騎兵,不動如山的步兵方陣,而弓弩和南蠻的戰象軍團也為主力的一部分。雖然對自己的軍隊戰力很有信心,但bob深知,要征服乙個民族就要從文化入手。於是bob大力鼓動軍隊將領學習拉丁文。

為簡化問題,以下用大寫英文本母代替拉丁文。

【任務】

經過一段時間的學習,將領們已經掌握了一些拉丁文詞彙。bob知道現在已經到了學習拉丁文的瓶頸期,他決定讓將領們閱讀一些固定長度的無空格的拉丁文文章。但是,如果將領閱讀文章時,不能在其中找到任何乙個自己已經掌握的詞彙,那麼他會非常傷心,覺得自己無能。相反,只要找到了乙個自己認識的單詞,將領們就會欣喜若狂,信心大漲(哪怕事實上和將領已知單詞相同的那一段拉丁文並不能解釋為那個單詞,即將領「斷章取義」)。bob要培養將領學習拉丁文的信心。他想知道,如果知道了將領掌握的單詞數量和乙個固定的文章長度,能寫出多少篇激勵將領信心的文章。

【輸入格式】

輸入檔案input.txt第一行包含兩個正整數n,m,其中n表示將領掌握的單詞總數,m表示要寫的文章的固定長度(文章只可能有大寫英文本母,不含空格)

接下來是n行由大寫英文本母組成的字串,每乙個都是將領掌握的單詞。

【輸出格式】

輸出檔案output.txt僅有一行,包含乙個非負整數,表示激勵將領信心的文章的總數模19980515的值

【輸入樣例】

1 1a

【輸出樣例】

1【資料範圍】

對於30%的資料,滿足1<=n<=10,1<=m<=10

對於100%的資料,滿足1<=n<=100,1<=m<=100,將領掌握的單詞長度不超過100

【備註】

為了不(you)說(xi)廢(ping)話(heng),出題人決定不給東方軍團加入重騎兵部隊

多麼具有代表性的樣例啊!

#include #include #include using namespace std;

int read()

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

return n * sign;

}inline void print(int x)

if(!x) puts("0");

else

for(int i = len; i; --i) putchar(bit[i] + '0');

puts(""); }}

const int size = 26;

const int mod = 19980515;

const int maxn = 10005;

int n, m;

char st[105];

namespace acautomation t[maxn], *root;

inline trie *newnode()

inline void init()

inline void insert(char *s)

p -> w = 1; }

queue q;

inline void build()

else root -> ch[i] = root;

while(q.size())

else p -> ch[i] = fail -> ch[i];

}} }

inline void update(int &a, int &b)

inline int count()

}int ans = 0;

for (int i = 0; i <= tot; ++i) if (!t[i].w) update(ans, dp[m][i]);

return ans; }

}inline int pow(int a, int b)

return temp;

}int main()

build(); int temp = count();

print((pow(size, m) + mod - temp) % mod);

return 0;

}

AC自動機 建立nlogn個AC自動機

string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...

AC自動機及字尾自動機

ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...

AC自動機演算法

ac自動機簡介 首先簡要介紹一下ac自動機 aho corasickautomation,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法之一。乙個常見的例子就是給出n個單詞,再給出一段包含m個字元的文章,讓你找出有多少個單詞在文章裡出現過。要搞懂ac自動機,先得有字典樹trie和kmp...