ZOJ 3228(AC自动机+修改的匹配)

题目大意:给出一个字符串和若干个单词,问这些单词在字符串里面出现了多少次。单词前面为0表示这个单词可重叠出现,1为不可重叠出现。

分析:可重叠出现的单词可以直接用ac自动机就解决。至于不可重叠的单词,可以用一个数组来记录下每个这种单词上一次出现的位置,假如当前得到这个单词的位置和上一次的位置之间足够放下一个单词(即两个位置的坐标差大于等于单词长度)时才算一次,具体的可以看程序。

//#pragma comment(linker, "/STACK:102400000")
#include<cstdlib>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<vector>
#define tree int o,int l,int r
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
#define lo o<<1
#define ro o<<1|1
#define pb push_back
#define mp make_pair
#define ULL unsigned long long
#define LL long long
#define inf 0x7fffffff
#define eps 1e-7
#define N 610009
#define M 26
using namespace std;
int m,n,T,t,x,y,u;
int ch[N][M],v[2][N],sz;
int f[N],last[N];
char str[100009][10],s[100009],len[100009];
int pre[2][100009],flag[100009],num[100009];
int pos[100009];
void init()
{sz=1;for(int i=0; i<100009; i++)pre[0][i]=pre[1][i]=-1;memset(pos,-1,sizeof(pos));memset(num,0,sizeof(num));memset(ch[0],0,sizeof(ch[0]));memset(v,0,sizeof(v));memset(last,0,sizeof(last));
}
int idx(char c)
{return c-'a';
}
void insert(char str[],int val,int sub)
{int u=0;for(int i=0; str[i]; i++){int c=idx(str[i]);if(!ch[u][c]){memset(ch[sz],0,sizeof(ch[sz]));ch[u][c]=sz++;}u=ch[u][c];}if(v[sub][u]!=0)pre[sub][val]=v[sub][u];v[sub][u]=val;
}
void getac()
{f[0]=0;queue<int>q;for(int c=0; c<M; c++){int u=ch[0][c];if(u){f[u]=0;q.push(u);last[u]=0;}}while(!q.empty()){int r=q.front();q.pop();for(int c=0; c<M; c++){int u=ch[r][c];if(!u){ch[r][c]=ch[f[r]][c];}else{q.push(u);int s=f[r];f[u]=ch[s][c];last[u]=(v[0][f[u]]||v[1][f[u]])?f[u]:last[f[u]];}}}
}
void print(int u,int i)
{if(u){if(v[0][u])num[v[0][u]]++;if(v[1][u]&&i-pos[v[1][u]]>=len[v[1][u]])//特殊处理
        {num[v[1][u]]++;pos[v[1][u]]=i;//别忘!
        }print(last[u],i);}
}
void find(char str[])
{int n=strlen(str);int j=0;for(int i=0;i<n;i++){int c=idx(str[i]);j=ch[j][c];if(v[0][j]||v[1][j])print(j,i);else if(last[j])print(last[j],i);}
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("ex.in","r",stdin);
#endifint ncase=0;scanf("%d",&T);while(scanf("%s",s)==1){init();scanf("%d",&n);for(int i=1; i<=n; ++i){scanf("%d%s",&flag[i],str[i]);len[i]=strlen(str[i]);insert(str[i],i,flag[i]);}getac();find(s);for(int i=n;i>=1;i--)if(pre[flag[i]][i]!=-1){num[pre[flag[i]][i]]=num[i];}printf("Case %d\n",++ncase);for(int i=1;i<=n;i++)printf("%d\n",num[i]);puts("");}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/sbaof/p/3376456.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇论文未发博士毕业,中科院最年轻院士入职浙大

全世界只有3.14 % 的人关注了爆炸吧知识本文由科研大匠&#xff08;Id:keyandajiang&#xff09;综合整理自科技日报、网络、科研大匠等11月30日&#xff0c;浙江大学官微转载《浙江日报》头版文章消息提到&#xff0c;“目前中国最年轻的中科院院士孙斌勇已入职数学高等研究院…

4.7、Bootstrap V4自学之路------组件---广告屏

为什么80%的码农都做不了架构师&#xff1f;>>> 示例 单独的一个空的标签 <div class"jumbotron"><!-- 背景色是灰色的--> <div> PS&#xff1a;可以看出来&#xff0c;其中上下边距还是挺高的。 <div class"jumbotron"&…

计算机和hdmi无法正常显示,HDMI都不灵 为什么电脑连电视效果差?

1电脑连接电视用法人群庞大【中关村在线显示器频道原创】目前的桌面级显示器尺寸最大的范围就是30英寸&#xff0c;但是30英寸的显示器产品价格过于昂贵&#xff0c;因此很少有消费者能够选择购买。因此&#xff0c;目前大部分消费者都会购买27英寸的显示器&#xff0c;但是问题…

easyui 修改单元格内容_初学Excel办公软件快速修改文字的方法

今天我们学习Excel办公软件快速修改文字的方法&#xff0c;首先我们看这个表格里面的文字很多都是相差一个字&#xff0c;甚至很多内容相差不大&#xff0c;因此我们在输入文字时就需要改进快速方法了。首先我们根据图片来操作&#xff0c;我们修改红色字体里的数据&#xff0c…

Android display架构分析

这篇文章非常好&#xff0c;必须转载。目录(?)[-] Kernel Space Display架构介绍函数和数据结构介绍函数和数据结构介绍函数和数据结构介绍数据流分析初始化过程分析User Space display接口Kernel display接口典型应用flow分析介绍 Surface manager&#xff08;surface flinge…

从状态转移看:载波侦听多路访问/冲突避免(CSMA/CA)

CSMA/CA是写入IEEE802.11的无线网络MAC层标准协议&#xff0c;相信看到这篇文章的读者都知道它是用来做什么的。但许多短文对这个协议的解释都有所缺乏&#xff0c;因此本文用状态转换图的形式详细说明协议的工作流程。&#xff08;好吧其实是作者看到一个状态图有感而发&#…

年度迷惑新闻:美女其实是个男生?

1 南方人为什么不喜欢冬天&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 老板果然是有两把刷子&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 干大事者必是单身狗&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 把狗子的铁饭…

The import com.sun.tools cannot be resolved

2019独角兽企业重金招聘Python工程师标准>>> 这是因为在myeclipse中&#xff0c;有自带的jar包&#xff1b;儿导入eclipse中&#xff0c;用的是自己安装的jre&#xff0c;tool.jar包是在JDK中&#xff0c;不是在jre中,所以window-》preferrence-》java-》installed …

Android之发送短信后按钮(60秒)变灰色每隔一秒递减显示

无论是做PC端还是android端,每次注册都有发送短信之后,60秒每隔一秒递减显示,如下图 这个地方需要注意的是按钮变灰色之后不能再点击,然后就是android更新UI,需要用handle,或者其它post方式,关键代码如下 /*** 显示时间在梯减的文本框*/public void showTime() {new T…

AgileConfig-1.5.5 发布 - 支持 JSON 编辑模式

本次更新加入了2个新的编辑模式&#xff1a;JSON 编辑模式、TEXT 编辑模式。特别是 JSON 编辑模式是大家比较期待的一个功能。因为大家都习惯了 appsettings.json 的配置编辑模式&#xff0c;所以天生的喜欢 JSON 视图。有了 JSON 编辑模式后&#xff0c;大家就可以直接把原来的…

桩筏有限元中的弹性板计算_永清县打桩机租赁钢板桩租赁怎么联系?

永清县打桩机租赁钢板桩租赁怎么联系&#xff1f;选择专业(产品)震宇建筑工程有限公司震宇钢板桩工程有限公司是一家专业拉森钢板桩工程施工的公司&#xff0c;注册资金1000万&#xff0c;专注钢板桩工程施工20年年经验&#xff0c;经过多年发展&#xff0c;目前震宇钢板桩在广…

(c语言)二叉树中序线索(数据结构十七)

1.数据类型定义在代码中为了清楚的表示一些错误和函数运行状态&#xff0c;我们预先定义一些变量来表示这些状态。在head.h头文件中有如下定义&#xff1a; //定义数据结构中要用到的一些变量和类型 #ifndef HEAD_H #define HEAD_H#include <stdio.h> #include <mallo…

如果让我做一回产品经理。。。

2019独角兽企业重金招聘Python工程师标准>>> 不给外行老板打工&#xff0c;除非自己是合伙人 玩法、题材、货币化模式上&#xff0c;至少要有一个有创新 不做中国市场&#xff0c;至少不优先做 杜绝团队内部吵架 团队优于产品&#xff0c;即使对于创业公司也是这样 …

有文化能有多可怕?

全世界只有3.14 % 的人关注了爆炸吧知识知乎上有个高赞问题&#xff1a;有哪些值得长期坚持下去就能改变人生的好习惯&#xff1f;其中最高频的回答是读书。随着经历和阅历的增加&#xff0c;越来越多的人清醒的认识到&#xff1a;读书不再是学生时代的事&#xff0c;而是一生的…

Android之mvp和mvc对比分析以及实际应用

转载地址&#xff1a;http://frodoking.github.io/2015/02/01/android-mvc-mvp-analysis/ 为了解决逻辑处理和UI视图的松散耦合&#xff0c;MVC和MVP的架构模式在很多App中使用比较广泛。 那什么是MVP呢&#xff1f;它又和我们常常听到的MVC有什么关系了以及区别呢&#xff1f;…

一切为了孩子——一位IT麻麻的新西兰移民记录

Lina是CITA上个月一期meetup的主讲人&#xff0c;介绍了她自己的移民经历、求职经验和工作心得。因为反响很热烈&#xff0c;所以特意记录整理成文字稿&#xff0c;由于分享的时间比较长&#xff0c;所以会分为两篇文章。考虑到叙事的完整性&#xff0c;本文在Lina会上分享的基…

关于java连接sqlserver2000 和sqlserver2005的初识

2019独角兽企业重金招聘Python工程师标准>>> sqlserver2000 的连接&#xff1a; java程序可用Microsoft的JDBC驱动连接sqlserver2000&#xff08;但微软的JDBC驱动并不能很好的支持java语言&#xff0c;在连接sqlserver2000时&#xff0c;一不小心就会出一些bug&am…

厕所里的善良之举!

1 下手超狠&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 别随便嘲笑人家&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 跆拳道最高境界&#xff08;via.跃大大跃&#xff09;▼4 真正的工具人▼5 爸妈的24岁和你的24岁▼6 哦吼&#xff0c;是牛顿…

Android之View基础总结(View的事件体系一)

什么是View View是所有Android中所有控件的基类,不管是Button TextView还是复杂的RelativeLayout和ListView,它们呢的共同基类都是View,View是一种界面层的控件的一种抽象,ViewGroup包含了许多控件,它也继承View,比如自定义TestButton是一个View,它继承了TextView,而TextVi…

.NET 6新特性试用 | 常量内插字符串

前言编写代码时&#xff0c;我们常常需要组合字符串。如下代码&#xff1a;string scheme "https"; string host "xxx.com"; int port 8080;Console.WriteLine(string.Format("{0}://{1}:{2}", scheme, host, port));但是&#xff0c;这种替换…