洛谷 P2292 HNOI2004 L語言

2021-10-08 09:02:26 字數 1646 閱讀 6517

ac自動機 + dp:

洛谷這題資料加強之後用bfs t了最後一兩個點

用了乙個dp陣列做轉移

注意一下字串下標的偏移(因為有了dp陣列)

存下trie樹上的結尾結點的字串長度

注意一下ac自動機的空間和dp陣列的空間

其他就沒啥了

#include

#include

#include

#include

#include

#include

#include

#include

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

#define ll long long

#define ull unsigned long long

#define pi acos(-1)

#define pb(x) push_back(x)

#define il inline

#define re register

#define io; ios::sync_with_stdio(0);cin.tie(0);

#define ls (o<<1)

#define rs (o<<1|1)

#define pii pair

using

namespace std;

const

int maxn =

2e6+5;

const

int maxm =

1e5+5;

const

int inf =

0x3f3f3f3f

;const ll linf =

3e17+1

;const

int mod =

1e9+7;

int n, r,h;

inline

intread()

while

(isdigit

(ch)

)return

(f==1)

?x:-x;

}struct tree

aho[

205]

;int len[

205]

, idx;

char t[maxn]

;bool dp[maxn]

;il void

insert

(char s)

aho[now]

.end ++

; len[now]

= len;

}void

get_fail()

}while

(!q.

empty()

)else

aho[u]

.vis[i]

= aho[aho[u]

.fail]

.vis[i];}

}}intqry

(char s)

}}}return ans;

}int

main()

get_fail()

;for

(int i =

0; i < m; i++

)return0;

}

洛谷 P2292 HNOI2004 L語言

標點符號的出現晚於文字的出現,所以以前的語言都是沒有標點的。現在你要處理的就是一段沒有標點的文章。一段文章t是由若干小寫字母構成。乙個單詞w也是由若干小寫字母構成。乙個字典d是若干個單詞的集合。我們稱一段文章t在某個字典d下是可以被理解的,是指如果文章t可以被分成若干部分,且每乙個部分都是字典d中的...

題解 P2292 HNOI2004 L語言

這到題一眼看去,似乎就是個ac自動機,然後迅速的打出了ac自動機的板子。最開始我想的是,不就判斷一下長度就行了嗎,把每乙個單詞的長度求出來,在ac自動機的時候每次用當前位置的下標減去單詞長度,如果小於等於目前的字首長度,就更新答案,然後迅速地打出 發現只有70分,仔細思考了一下,發現是因為我沒有讀清...

洛谷 P1437 HNOI2004 敲磚塊

在乙個凹槽中放置了 n 層磚塊 最上面的一層有n 塊磚,從上到下每層依次減少一塊磚。每塊磚 都有乙個分值,敲掉這塊磚就能得到相應的分值,如下圖所示。14 15 4 3 23 33 33 76 2 2 13 11 22 23 31如果你想敲掉第 i 層的第j 塊磚的話,若i 1,你可以直接敲掉它 若i...