洛谷 P 2292 L語言 AC自動機

2021-09-25 17:17:53 字數 1840 閱讀 8799

一道比較簡單的題,結果自己腦補了各種奇葩(錯誤)的判斷,搞了乙個多小時。。。

題意:用已知字典去識別乙個串,求最長可識別字首(指能將此字首分解為字典裡面的單詞)

思路:建好ac自動機,記錄好每個點所代表的字串的長度

拿要匹配的串從前往後匹配,若某個點完全不能匹配,直接退出(可以不考慮這個)

處理好什麼叫「可以匹配」就好了,就是能將當前串分解為乙個可識別的字首和乙個可識別的字尾即可

因此對當前字元跑fail邊(即跑字尾),若「可以匹配」,則更新最長可識別字首,並標記當前串(也是乙個字首)可識別

題目描述

標點符號的出現晚於文字的出現,所以以前的語言都是沒有標點的。現在你要處理的就是一段沒有標點的文章。

一段文章t是由若干小寫字母構成。乙個單詞w也是由若干小寫字母構成。乙個字典d是若干個單詞的集合。我們稱一段文章t在某個字典d下是可以被理解的,是指如果文章t可以被分成若干部分,且每乙個部分都是字典d中的單詞。

例如字典d中包括單詞,則文章『whatisyourname』是在字典d下可以被理解的,因為它可以分成4個單詞:『what』, 『is』, 『your』, 『name』,且每個單詞都屬於字典d,而文章『whatisyouname』在字典d下不能被理解,但可以在字典d』=d+下被理解。這段文章的乙個字首『whatis』,也可以在字典d下被理解,而且是在字典d下能夠被理解的最長的字首。

給定乙個字典d,你的程式需要判斷若干段文章在字典d下是否能夠被理解。並給出其在字典d下能夠被理解的最長字首的位置。

輸入格式

輸入檔案第一行是兩個正整數n和m,表示字典d中有n個單詞,且有m段文章需要被處理。之後的n行每行描述乙個單詞,再之後的m行每行描述一段文章。

其中1<=n, m<=20,每個單詞長度不超過10,每段文章長度不超過1m。

輸出格式

對於輸入的每一段文章,你需要輸出這段文章在字典d可以被理解的最長字首的位置。

輸入輸出樣例

輸入4 3

isname

what

your

whatisyourname

whatisyouname

whaisyourname

輸出14 (整段文章』whatisyourname』都能被理解)

6 (字首』whatis』能夠被理解)

0 (沒有任何字首能夠被理解)

//#pragma comment(linker, "/stack:102400000,102400000")

#include "bits/stdc++.h"

#define pb push_back

#define ls l,m,now<<1

#define rs m+1,r,now<<1|1

#define hhh printf("hhh\n")

#define see(x) (cerr<<(#x)<<'='<<(x)inline int read()

const int maxn = 1e3+10;

const int mod = 1e4+7;

const double eps = 1e-9;

char s[maxn*maxn];

int n, m;

int trie[maxn][26], fail[maxn], ed[maxn], cnt, sl[maxn];

bool vis[maxn*maxn];

void insert()

else trie[now][i]=trie[fail[now]][i];}}

}int match()

return mlen;

}int main()

}

洛谷P2292 L語言

題目大意 給定乙個長度為 n 的字串和乙個字典,字典中所有的字串的長度均不超過 10,求給定的字串從前往後最多有多少位可以與字典匹配。題解 設 dp i 表示串的前 i 位是否能夠與字典匹配,若 dp i 1 則對 s i 1,部分與字典進行匹配,即 對可以匹配的最大長度進行拓展。由於字典中每個串的...

洛谷 P2292 AC自動機 狀態壓縮

題目問,給定 n nn 個模式串,問你主串的 可理解的 最長字首長度。可理解的 意思指可以被分成若干個模式串。首先我們知道ac自動機,fai lfail fail 指標跳轉的是相同字尾,在跳轉的過程中會依據長度從大到小經過相同的字尾。比如 abc d bc d dabcd bcd d abcd bc...

AC自動機 洛谷P3808 AC自動機(簡單版)

給定 n n 個模式串和1個文字串,求有多少個模式串在文字串裡出現過 多模匹配用ac role presentation aca c自動機 首先建造一棵字典樹,新增所有模式串,然後建造失配指標,最後進行匹配 luogu judger enable o2 include include include...