思路:将能跑到的状态标记一下,在bfs搜一下就好啦。

#include<bits/stdc++.h>
#define LL long long
#define ll long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = 1e7 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = ; int n, m, len[], pos[];
char s[N], t[]; struct Ac {
int ch[N][], f[N], d[N], tot, sz;
Ac(int sz) {this->sz = sz;}
void init() {tot = ;}
int newNode() {
tot++; f[tot] = ;
memset(ch[tot], , sizeof(ch[tot]));
return tot;
}
inline int idx(char c) {
if(c == 'E') return ;
if(c == 'S') return ;
if(c == 'W') return ;
if(c == 'N') return ;
} void addStr(char *s, int ID) {
int u = ;
for(int i = ; s[i]; i++) {
int c = idx(s[i]);
if(!ch[u][c]) ch[u][c] = newNode();
u = ch[u][c];
}
pos[ID] = u;
} void build() {
queue<int> que;
for(int c = ; c < sz; c++) {
int v = ch[][c];
if(!v) ch[][c] = ;
else f[v] = , que.push(v);
}
while(!que.empty()) {
int u = que.front(); que.pop();
for(int c = ; c < sz; c++) {
int v = ch[u][c];
if(!v) ch[u][c] = ch[f[u]][c];
else f[v] = ch[f[u]][c], que.push(v);
}
}
} void solve(char *s) {
queue<int> que;
memset(d, -, sizeof(d));
int u = ;
d[u] = ; que.push(u);
for(int i = ; s[i]; i++) {
int c = idx(s[i]);
u = ch[u][c];
int p = u;
while(p && d[p] == -) {
d[p] = ; que.push(p); p = f[p];
}
} while(!que.empty()) {
int u = que.front(); que.pop();
for(int c = ; c < sz; c++) {
int v = ch[u][c];
if(d[v] != -) continue;
d[v] = d[u] + ;
que.push(v);
}
}
for(int i = ; i <= m; i++) printf("%d\n", len[i] - d[pos[i]]);
}
} ac(); int main() {
ac.init();
scanf("%d%d", &n, &m);
scanf("%s", s);
for(int i = ; i <= m; i++) {
scanf("%s", t);
ac.addStr(t, i);
len[i] = strlen(t);
}
ac.build();
ac.solve(s);
return ;
} /*
*/

最新文章

  1. Python的包管理工具Pip (zz )
  2. 给UINavigationBar自定义颜色
  3. Combination Sum | &amp; || &amp; ||| &amp; IV
  4. Codeforces Round #382 (Div. 2) C. Tennis Championship 斐波那契
  5. oracle自动备份
  6. mysql单引号和双引号的用法
  7. python mysqldb使用dictcursor
  8. 安卓组件-BroadcastReceiver
  9. KiKi&#39;s K-Number
  10. 使用Maven Archetype插件构建Maven工程原型模板
  11. 二叉树的递归遍历 Tree UVa548
  12. 发现Chrome 浏览器 JavaScript Date对象的几个Bug
  13. Python学习笔记二
  14. HDU - 3652
  15. hihoCoder编程练习赛69
  16. CNPM 安装 for angularjs
  17. M2 终审
  18. Java 线性表、栈、队列和优先队列
  19. oracle的中文排序问题
  20. 图解tensorflow 源码分析

热门文章

  1. Nginx 1 Web Server Implementation Cookbook系列--(1)debug mode
  2. HDU1394 逆序数
  3. Mac 访问隐藏文件方法! 网上方法在我电脑上都不可用!
  4. 由一篇博文做出的代码,不用Math.round()如何实现其功能
  5. idea 多模块引用
  6. 获取数据源数据的实现---Architecting Android
  7. [cerc2012][Gym100624C]20181013
  8. 「6月雅礼集训 2017 Day10」quote
  9. 【洛谷 P5110】 块速递推(矩阵加速,分块打表)
  10. 实现拷贝函数(strcpy)