COJ 0999 WZJ的数据结构(负一)
| WZJ的数据结构(负一) |
| 难度级别:D; 运行时间限制:1000ms; 运行空间限制:262144KB; 代码长度限制:2000000B |
|
试题描述
|
|
输入N个模板串Pi和文本串T,输出每个模板串Pi在T中出现了多少次。
|
|
输入
|
|
第一行为一个正整数N。
接下来N行为Pi。 最后一行为T |
|
输出
|
|
输出N行,第i行为模板串Pi在T中出现的次数。
|
|
输入示例
|
|
5
a ab ba aba a ababababa |
|
输出示例
|
|
5
4 4 4 5 |
|
其他说明
|
|
1<=sigma(|Pi|)<=1000000
1<=|T|<=1000000 保证Pi与T只由小写字母'a'或'b'组成 |
题解:感人至深!
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
const int maxn=+,inf=-1u>>,sig=,maxnode=maxn;
struct node{node*tx[sig],*fail;int x;node(){x=;}}ac[maxnode],*nodecnt=ac,*root=nodecnt++;
struct ted{int x,y;ted*nxt;}adj[maxn],*ms=adj,*fch[maxn],adj2[maxn],*ms2=adj2,*fch2[maxn];
void add(int x,int v){*ms=(ted){x,v,fch[x]};fch[x]=ms++;return;}
void add2(int x,int y){*ms2=(ted){x,y,fch2[x]};fch2[x]=ms2++;return;}
int num[maxn],ans[maxn];
void insert(char*s,int v){
node*x=root;
for(int i=;s[i];i++){
int c=s[i]-'a';
if(!x->tx[c]) x->tx[c]=nodecnt++;
x=x->tx[c];
} add(x-ac,v);return;
}
void getfail(){
queue<node*>Q;for(int c=;c<sig;c++)if(root->tx[c])Q.push(root->tx[c]),root->tx[c]->fail=root;
while(!Q.empty()){
node*x=Q.front();Q.pop();
for(int c=;c<sig;c++)if(x->tx[c]){
node*p=x->fail;while(p&&!p->tx[c])p=p->fail;if(!p)p=root;
x->tx[c]->fail=p->tx[c]?p->tx[c]:root;Q.push(x->tx[c]);
}
} return;
}
void dfs(node*x){
for(ted*e=fch2[x-ac];e;e=e->nxt) dfs(e->y+ac),num[x-ac]+=num[e->y];
}
int query(char*s){
for(int i=;i<=nodecnt-ac-;i++) add2(ac[i].fail-ac,i);
node*x=root;
for(int i=;s[i];i++){
int c=s[i]-'a';
while(x&&!x->tx[c]) x=x->fail;if(!x)x=root;
x=x->tx[c]?x->tx[c]:root;num[x-ac]++;
} dfs(root);
for(int i=nodecnt-ac-;i;i--)
for(ted*e=fch[i];e;e=e->nxt)
ans[e->y]=num[i];
}
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') sig=-;ch=getchar();}
while(isdigit(ch)) x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<) putchar('-'),x=-x;
int len=,buf[];while(x) buf[len++]=x%,x/=;
for(int i=len-;i>=;i--) putchar(buf[i]+'');return;
}
char s[maxn];
int n;
void init(){
n=read();
for(int i=;i<=n;i++) scanf("%s",s),insert(s,i);
getfail();
scanf("%s",s);query(s);
for(int i=;i<=n;i++) write(ans[i]),ENT;
return;
}
void work(){
return;
}
void print(){
return;
}
int main(){
init();work();print();return ;
}
COJ 0999 WZJ的数据结构(负一)的更多相关文章
- COJ 0967 WZJ的数据结构(负三十三)
WZJ的数据结构(负三十三) 难度级别:E: 运行时间限制:7000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大 ...
- COJ 0970 WZJ的数据结构(负三十)树分治
WZJ的数据结构(负三十) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,点和边上均有权值.请你设计 ...
- COJ 0990 WZJ的数据结构(负十)
WZJ的数据结构(负十) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给你一个N个节点的有根树,从1到N编号,根节点为1并给 ...
- COJ 0995 WZJ的数据结构(负五)区间操作
WZJ的数据结构(负五) 难度级别:C: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大小为 ...
- COJ 0979 WZJ的数据结构(负二十一)
WZJ的数据结构(负二十一) 难度级别:C: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你实现一个数据结构,完成这样的功能: 给你一个 ...
- COJ 0981 WZJ的数据结构(负十九)树综合
WZJ的数据结构(负十九) 难度级别:E: 运行时间限制:3500ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 WZJ的数据结构中有很多都是关于树的.这让很多练习 ...
- COJ 1008 WZJ的数据结构(八) 树上操作
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=986 WZJ的数据结构(八) 难度级别:E: 运行时间限制:3000ms: ...
- COJ 1007 WZJ的数据结构(七) 树上操作
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=983 WZJ的数据结构(七) 难度级别:C: 运行时间限制:1000ms: ...
- COJ 1003 WZJ的数据结构(三)ST表
WZJ的数据结构(三) 难度级别:B: 运行时间限制:3000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大小为N的 ...
随机推荐
- java GBK字符转换成为UTF-8编码字符
import java.util.HashMap; import java.util.Map; /** * 创建日期: 2014-04-18 10:36:25 * 作者: 黄飞 * mail:huan ...
- 简单使用NSURLConnection、NSURLRequest和NSURL
以下是代码,凝视也写得比較清楚: 头文件须要实现协议NSURLConnectionDelegate和NSURLConnectionDataDelegate // // HttpDemo.h // My ...
- spring mvc事务注解
@Transactional(noRollbackFor=RuntimeException.class)方法事务说明@Transactional(RollbackFor=Exception.class ...
- 多线程、Service与IntentService的比较
资料摘自网络(侵删) Service Thread IntentService AsyncTask When to use ? Task with no UI, but shouldn't b ...
- Unix系统解压tar包时出现@LongLink错误
Unix系统上使用tar命令解压tar包后,多了一个@LongLink的文件,并且原来的tar包解压后不完整.网上查了下,原因是AIX系统上tar命令自身的一个缺陷.解决办法:把该tar包上传到lin ...
- codevs 1733 聪明的打字员 (Bfs)
/* Bfs+Hash 跑的有点慢 但是codevs上时间限制10s 也ok */ #include<iostream> #include<cstdio> #include&l ...
- javascript 中寻找性能瓶颈
1.如果一个段代码很耗时的话你可以注释掉一部分你认为是很耗时的,或者干脆全部注释掉,然后再一点一点的解开. 2.js优化中最主要的还是对dom操作的优化,单纯的js执行时间是很短的,而js和dom之间 ...
- CSS3 3D转换
CSS3允许你使用3D转换来对元素进行格式化. 3D转换方法: rotateX() rotateY() 浏览器支持 属性 浏览器支持 transform IE10和Firefox支 ...
- (转)Discuz!NT图文安装教程
不同目录下的安装方法根据目前大家对论坛的使用需求,在安装上面大致有三种情况,站点根目录下安装,站点虚拟目录下安装和站点子目录下安装. 1.根目录安装 根目录安装是最简单也是稳定系数最高的安装和使用方式 ...
- colorful-记录好看的颜色
p { float: left; width: 100px; height: 100px; border: 1px solid black; margin: 5px; text-align: cent ...