http://172.20.6.3/Problem_Show.asp?id=1369

trie树如果不优化就这么往里面放这么多单词肯定超空间+超时,所以需要去掉无用的字符串(不属于原字符串的),但是一个一个判断时间又很长;

所以解决方案就是用一个多维vis数组胡搞判定一下,非常魔性。。。

代码

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const long long maxn=;
const int modn=;
int n,m;
char ch[maxn]={};
char ch1[]={};
int vis[maxn]={};
queue<int>q;
struct trie{
int next[];
bool exist;
int fail,d;
}e[maxn*];int tot=;
bool ff[][][][][]={};
void insert(int k,int d,int x){
if(d==k){
e[x].exist=;e[x].d=d;
return;
}
int z=ch1[d]-'a';
if(!e[x].next[z])e[x].next[z]=++tot;
insert(k,d+,e[x].next[z]);
}
void build(){
q.push();int x,y,f;
while(!q.empty()){
x=q.front();q.pop();
for(int i=;i<;i++){
y=e[x].next[i];
if(y){
if(x!=){
f=e[x].fail;
while((!e[f].next[i])&&f)f=e[f].fail;
e[y].fail=e[f].next[i];
}q.push(y);
}
}
}
}
int read(){
char chh=getchar();int k=;
while(chh<'a'||chh>'z'){chh=getchar();}
while(chh>='a'&&chh<='z'){ch1[k++]=chh;chh=getchar();}
return k;
}
void read1(){
char chh=getchar();int k=;
while(chh<'a'||chh>'z'){chh=getchar();}
while(chh>='a'&&chh<='z'){ch[k++]=chh;chh=getchar();}
}
int main(){
//freopen("wtf.in","r",stdin);
//freopen("wtf.out","w",stdout);
scanf("%d",&n);read1();
for(int i=;i<n;i++){
ff[(int)ch[i-]-'a'][(int)ch[i-]-'a'][(int)ch[i-]-'a'][(int)ch[i-]-'a'][(int)ch[i]-'a']=;
}
scanf("%d",&m);
for(int i=;i<=m;i++){
int siz=read(),wtf=;
for(int j=;j<siz;j++){
if(!ff[(int)ch1[j-]-'a'][(int)ch1[j-]-'a'][(int)ch1[j-]-'a'][(int)ch1[j-]-'a'][(int)ch1[j]-'a'])
wtf=;
}if(wtf)insert(siz,,);
}build();
int x=,y;
for(int i=;i<n;i++){
int z=ch[i]-'a';
while((!e[x].next[z])&&x){
x=e[x].fail;
}
x=e[x].next[z];y=x;
while((!e[y].exist)&&y){
y=e[y].fail;
}vis[i-e[y].d+]=max(vis[i-e[y].d+],e[y].d);
}
int k=;int t=;
for(int i=;i<n;i++){
k=max(vis[i],k);
if(k>)t++;
k--;
}
printf("%d\n",n-t);
return ;
}

最新文章

  1. rabbitmq 的心跳机制&amp;应用
  2. javascript中数组的常用方法
  3. PHP学习之登录以及后台商品展示
  4. STL之stack栈
  5. 如何清洗 Git Repo 代码仓库
  6. Struts2 面试题分析
  7. trap命令使用
  8. [IO] C# INI文件读写类与源码下载 (转载)
  9. WebService cxf 接口中获得拦截器参数
  10. Lucene全文检索引擎
  11. weblogic的使用
  12. C# 客户端程序调用外部程序的三种实现
  13. Html5的表单元素
  14. centos7只rsync+inotify
  15. java 日志体系目录
  16. 安装GDB-ImageWatch ,在QT中查看图像
  17. [日常工作]vCenter下虚拟机设置与宿主机时间同步的方法
  18. P3507 GRA-The Minima Game
  19. python 读取hive数据
  20. ios调用系统界面显示英文

热门文章

  1. solaris 服务器配置网络
  2. kndo grid:通过checkbox 实现多选和全选
  3. 初识费用流 模板(spfa+slf优化) 餐巾计划问题
  4. H264协议(转)
  5. devm_xxx机制
  6. Windows 10又现新Bug,24核心竟卡成蜗牛
  7. 【openjudge】C15C Rabbit&#39;s Festival CDQ分治+并查集
  8. 网站服务器压力Web性能测试(1):Apache Bench:Apache自带服务器压力测试工具
  9. CF914F Substrings in a String
  10. vscode的go插件安装