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...