喵星球上的点名(bzoj 2754)
Description
Input
Output
Sample Input
6 8 25 0 24 14 8 6 18 0 10 20 24 0
7 14 17 8 7 0 17 0 5 8 25 0 24 0
4 8 25 0 24
4 7 0 17 0
4 17 0 8 25
Sample Output
1
0
1 2
【提示】
事实上样例给出的数据如果翻译成地球上的语言可以这样来看
2 3
izayoi sakuya
orihara izaya
izay
hara
raiz
HINT
【数据范围】
对于30%的数据,保证:
1<=N,M<=1000,喵星人的名字总长不超过4000,点名串的总长不超过2000。
对于100%的数据,保证:
1<=N<=20000,1<=M<=50000,喵星人的名字总长和点名串的总长分别不超过100000,保证喵星人的字符串中作为字符存在的数不超过10000。
/*
map+AC自动机
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
#include<vector>
#define N 100010
using namespace std;
int fail[N],vis[N],mark[N],q[N],n,m,size=,ans1[N],ans2[N];
char ch[N];
map<int,int> to[N];
vector<int> a[N],st[N],V,M;
void insert(int id){
int len,now=;scanf("%d",&len);
for(int i=;i<len;i++){
int t;scanf("%d",&t);
if(!to[now][t]) to[now][t]=++size;
now=to[now][t];
}
st[now].push_back(id);
}
void acmach(){//构建自动机
int head=,tail=;
q[]=;
while(head<tail){
int now=q[++head];
for(map<int,int>::iterator i=to[now].begin();i!=to[now].end();i++){
int t=i->first,k=fail[now];
while(!to[k][t])k=fail[k];
fail[i->second]=to[k][t];//类似于kmp的失败数组
q[++tail]=i->second;
}
}
}
void get(int id,int x){
for(int i=x;i;i=fail[i])
if(!vis[i]){
vis[i]=;V.push_back(i);
for(int j=;j<st[i].size();j++)
if(!mark[st[i][j]]){
mark[st[i][j]]=;M.push_back(st[i][j]);
ans1[st[i][j]]++;
ans2[id]++;
}
}
else break;
}
void solve(int id){
int len=a[id].size(),now=;
for(int i=;i<len;i++){
int t=a[id][i];
while(!to[now][t]) now=fail[now];
now=to[now][t];get(id,now);
}
for(int i=;i<V.size();i++)vis[V[i]]=;
for(int i=;i<M.size();i++)mark[M[i]]=;
V.clear();M.clear();
}
int main(){
scanf("%d%d",&n,&m);
int len,x;
for(int i=;i<=n;i++){
scanf("%d",&len);
for(int j=;j<=len;j++) scanf("%d",&x),a[i].push_back(x);
a[i].push_back(-);
scanf("%d",&len);
for(int j=;j<=len;j++) scanf("%d",&x),a[i].push_back(x);
}
for(int i=-;i<=;i++) to[][i]=;
for(int i=;i<=m;i++) insert(i);
acmach();
for(int i=;i<=n;i++)
solve(i);
for(int i=;i<=m;i++) printf("%d\n",ans1[i]);
for(int i=;i<=n;i++) printf("%d ",ans2[i]);
return ;
}
喵星球上的点名(bzoj 2754)的更多相关文章
- AC日记——[SCOI2012]喵星球上的点名 bzoj 2754
2754 思路: AC自动机暴力处理匹配: 强大的ac自动机,强大的fail树,强大的map,强大的vector,强大的指针: 代码: #include <map> #include &l ...
- BZOJ 2754: [SCOI2012]喵星球上的点名
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 649 Solved: 305[Submit][Sta ...
- BZOJ 2754: [SCOI2012]喵星球上的点名 [后缀数组+暴力]
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1906 Solved: 839[Submit][St ...
- BZOJ 2754: [SCOI2012]喵星球上的点名 [AC自动机+map+暴力]
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1902 Solved: 837[Submit][St ...
- BZOJ 2754 SCOI 2012 喵星球上的点名 后缀数组 树状数组
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2068 Solved: 907[Submit][St ...
- BZOJ 2754 【SCOI2012】 喵星球上的点名
题目链接:喵星球上的点名 首先可以发现姓和名两个串就是逗你玩的.在两个串中间插入一个\(10001\),当成一个串做就可以了. 于是我们的问题转化为了: 有\(n\)个串\(A_1,A_2,\dots ...
- BZOJ_2754__[SCOI2012]_喵星球上的点名_(暴力+后缀数组)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2754 给出n个姓名串和m个点名串.求每个点名串在多少人的姓名中出现过(在名中出现或在姓中出现, ...
- BZOJ2754: [SCOI2012]喵星球上的点名
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 680 Solved: 314[Submit][Sta ...
- 【BZOJ2754】喵星球上的点名(AC自动机)
[BZOJ2754]喵星球上的点名(AC自动机) 题面 BZOJ 题解 友情提示:此题请不要在cogs上提交,它的数据有毒 对于点名串构建\(AC\)自动机 然后把名字丢进去进行匹配, 大力统计一下答 ...
- 【BZOJ2754】[SCOI2012]喵星球上的点名
[BZOJ2754][SCOI2012]喵星球上的点名 题面 bzoj 洛谷 题解 这题有各种神仙做法啊,什么暴力\(AC\)自动机.\(SAM\)等等五花八门 我这个蒟蒻在这里提供一种复杂度正确且常 ...
随机推荐
- 用户输入和while循环
函数input()的工作原理 message=input('Tell me something,and I will repeat it back to you:') print(message) 编 ...
- 从Docker到Kubernetes进阶
分享个网站,k8s技术圈阳明大佬的网站 现在基本都用有道云笔记了,比较方便,所以准备弃用博客园了...
- Silverlight日记:字符串装换成Path对象
一,需要动态绑定Path <UserControl x:Class="Secom.Emx2.SL.Common.Controls.EleSafe.Ele.Line" xmln ...
- 使用js将div高度设置为100%
在开发的工程中使用到了一些开源的bootstrap模板进行开发,在遇到一些需要替换的内容部分部分时,经常出现高度设置100%无法生效的问题,这里来用js强行设置一下. 思路:js监听窗口的缩放 ...
- 【MySql】Mysql ERROR 1067: Invalid default value for ‘date’ 解决
在给一个表添加字段的时候,忽然发现会报一个date类型的字段的默认值错误,郁闷~ 经过排查,原来是MySQL的配置问题,在wamp下,MySQL 5.7里是没有设置 SQL_MODE 的. 1.my. ...
- jQuery发送ajax请求实现跨域访问
Java代码的话,在返回响应之前调用如下代码中的allowCrossDomainAccess()方法: /** * 允许跨域访问 */ public void allowCrossDomainAcce ...
- Boostrap的自适应功能
其实理解栅栏模式之后,自适应功能就简单很多了,根据浏览器的大小,Boostrap有四种栅栏类名提供使用,用法与Css样式表类名选择器样式调用是一样的: xs:col-xs-1 ~ col-xs-12, ...
- OOP中常用到的函数
学习地址: http://www.jikexueyuan.com/course/2420.html 判断类是否存在 class_exists() 得到类或者对象中的成员方法组成的数组 get_clas ...
- 百度地图和高德地图的API视频教程
学习地址: http://www.houdunren.com/houdunren18_lesson_152?vid=10228 素材地址: https://gitee.com/houdunwang/v ...
- ACM 贪心算法总结
贪心算法的本质: 就是当前状态的最优解,它并不考虑全局. 什么是当前状态的最优解? 成本问题? https://www.cnblogs.com/xuxiaojin/p/9400892.html (po ...