hdu 4758 (AC自动机)
除了走到哪里,还要加状态表示当前节点和已经匹配的串
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include <set>
#include <queue>
#define ll long long
#define ld long double
#define lson l,m,rt<<1
#define pi acos(-1)
#define rson m+1,r,rt<<1|1
#define fo(i,l,r) for(int i = l;i <= r;i++)
#define fd(i,l,r) for(int i = r;i >= l;i--)
#define mem(x) memset(x,0,sizeof(x))
#define eps 1e-8
using namespace std;
const int maxn = ,maxs = ;
const ll inf = 1e9;
const ll mod = ;
ll read() {
ll x=,f=;
char ch=getchar();
while(!(ch>=''&&ch<='')) {
if(ch=='-')f=-;
ch=getchar();
};
while(ch>=''&&ch<='') {
x=x*+(ch-'');
ch=getchar();
};
return x*f;
}
struct Trie{
int nxt[maxn][maxs],fail[maxn],end[maxn];
int root,L;
int newnode(){
for(int i = ;i < maxs;i++)
nxt[L][i] = -;
end[L++]=;
return L-;
}
void init(){
L = ;
root = newnode();
}
void insert(char buf[],int id){
int len = strlen(buf);
int now = root;
for(int i = ;i < len;i++){
if(buf[i]=='R')buf[i]=;
else buf[i]=;
if(nxt[now][buf[i]]==-)
nxt[now][buf[i]] = newnode();
now = nxt[now][buf[i]];
}
end[now]|=id;
}
void build(){
queue<int> Q;
fail[root] = root;
for(int i = ;i < maxs;i++) {
if (nxt[root][i] == -) {
nxt[root][i] = root;
} else {
fail[nxt[root][i]] = root;
Q.push((nxt[root][i]));
}
}
while(!Q.empty()){
int now = Q.front();
Q.pop();
end[now] |= end[fail[now]];
for(int i = ;i < maxs;i++){
if(nxt[now][i]==-) {
nxt[now][i] = nxt[fail[now]][i];
}else{
fail[nxt[now][i]] = nxt[fail[now]][i];
Q.push(nxt[now][i]);
}
}
}
}
}ac;
int n,m;
char s[];
int dp[][][][];
void gao(){
fo(i,,n){
fo(j,,m){
fo(k,,ac.L){
fo(t,,) {
dp[i][j][k][t] = ;
}
}
}
}
dp[][][][]=;
fo(i,,n){
fo(j,,m){
fo(k,,ac.L-){
fo(t,,){
dp[i][j+][ac.nxt[k][]][t|ac.end[ac.nxt[k][]]] += dp[i][j][k][t];
dp[i+][j][ac.nxt[k][]][t|ac.end[ac.nxt[k][]]] += dp[i][j][k][t];
dp[i][j+][ac.nxt[k][]][t|ac.end[ac.nxt[k][]]] %= mod;
dp[i+][j][ac.nxt[k][]][t|ac.end[ac.nxt[k][]]] %= mod;
}
}
}
}
ll ans = ;
fo(i,,ac.L-){
ans = (ans + dp[n][m][i][]) % mod;
}
printf("%lld\n",ans);
}
int main() {
int T=read();
while(T--){
ac.init();
m=read();n=read();
fo(i,,){
scanf("%s",s);
ac.insert(s,i);
}
ac.build();
gao();
}
return ;
}
hdu 4758 (AC自动机)的更多相关文章
- Walk Through Squares HDU - 4758 AC自动机+简单状压DP
题意:给你两个串,求用m个R,n个D能组成多少个包含这两个串 题解:先构造一个AC自动机记录每个状态包含两个串的状态, 状态很容易定义 dp[i][j][k][status]表示在AC自动机K这个节点 ...
- hdu 2896 AC自动机
// hdu 2896 AC自动机 // // 题目大意: // // 给你n个短串,然后给你q串长字符串,要求每个长字符串中 // 是否出现短串,出现的短串各是什么 // // 解题思路: // / ...
- hdu 3065 AC自动机
// hdu 3065 AC自动机 // // 题目大意: // // 给你n个短串,然后给你一个长串,问:各个短串在长串中,出现了多少次 // // 解题思路: // // AC自动机,插入,构建, ...
- hdu 5880 AC自动机
Family View Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- hdu 2296 aC自动机+dp(得到价值最大的字符串)
Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 2825 aC自动机+状压dp
Wireless Password Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- hdu 3065 AC自动机(各子串出现的次数)
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 5384 AC自动机
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5384 题意:给n个母串,给m个匹配串,求每个母串依次和匹配串匹配,能得到的数目和. 分析:之前并不知道AC ...
- HDU 2222 AC自动机模板题
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2222 AC自动机模板题 我现在对AC自动机的理解还一般,就贴一下我参考学习的两篇博客的链接: http: ...
随机推荐
- centos7搭建docker+k8s集成
1. 关闭防火墙 # systemctl stop firewalld # systemctl disable firewalld # setenforce 2. 使用yum安装etcd和kubern ...
- 004-SaltStack入门篇之数据系统Grains、Pillar
1.什么是Grains? Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息.可以理解为Grains记录着每台Minion的一些常用属性,比如CPU ...
- 016-zabbix低级自动发现以及MySQL多实例
1.概述 Zabbix的网络发现是指zabbix server通过配置好的规则,自动添加host,group,template Zabbix的主动注册刚好和网络发现是相反的,功能基本一致.zabbix ...
- 008-zabbix监控nginx
(1)agent端配置 1)nginx编译安装需要加上该选项--with-http_stub_status_module 2)修改nginx配置文件 #vim /usr/local/nginx/con ...
- DevExpress WinForms v19.1新版亮点:Tree List等控件性能增强
行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...
- Python:查看解释器的位置
以前学Python时,有时出现这样的情况:明明记得装了scipy包,怎么打import scipy报错说我没这个包? 问题出在,你的电脑上安装了不止一个Python... 而每安装一个包,仅仅在这个P ...
- 树莓派Zero W无键盘无屏幕初始化
买了个树莓派Zero W,结果发现没mini hdmi线 淘宝了一根mini hdmi,等了5天,拿到手后发现zero还没地接键盘,这下脑袋大了 查了下资料,发现树莓的系统,可以这boot分区中加入一 ...
- arch+xfce4音量控制快捷键插件
音量控制快捷键插件: sudo pacman -S xfce4-volumed
- ReentrantReadWriteLock源码分析笔记
ReentrantReadWriteLock包含两把锁,一是读锁ReadLock, 此乃共享锁, 一是写锁WriteLock, 此乃排它锁. 这两把锁都是基于AQS来实现的. 下面通过源码来看看Ree ...
- vscode匹配括号插件
给大家推荐一个vscode匹配括号的插件: Bracket Pair Colorizer.超级好用哦