喵星球上的点名(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\)等等五花八门 我这个蒟蒻在这里提供一种复杂度正确且常 ...
随机推荐
- Launch Instance---source for openstack
If you want to create an instance that uses ephemeral storage, meaning the instance data is lost whe ...
- SQL Server数据库字段类型说明
SQL Server数据库字段类型说明 目前Sql Server 数据库一共有X个字段类型,大体分为9类,分别是字符串类型.二进制码字符串数据类型.Unincode字符串数据.整数类型.精确数据类型. ...
- 20180901 JavaScript闭包和匿名函数自动调用
引用: 1. JavaScript闭包_by runoob 2. JS中(function(){xxx})这么写是什么意思? (一)闭包是可以访问上一层函数作用域里变量的函数,即便上一层函数已经关闭. ...
- 【Linux】开放指定端口设置
这里以开放tomcat的8080端口为例 1.开放Linux的8080端口 vi /etc/sysconfig/iptables 进入编辑页面,在指定位置新增以下配置 -A INPUT -m stat ...
- destoon 数据库操作
1.插入数据 $db->query("INSERT INTO ".get_table($mid)." ($sqlk) VALUES ($sqlv)"); ...
- Python正则表达式详解——re库
一.简介 1.1.相关链接 官方文档: Python2:https://docs.python.org/2/library/re.html Python3:https://docs.python.or ...
- Linux 用户管理(三)
一.userdel --delete a user account and related files -r --remove 删除用户及家目录 二.id --print real and effe ...
- [译]The Python Tutorial#8. Errors and Exceptions
[译]The Python Tutorial#Errors and Exceptions 到现在为止都没有过多介绍错误信息,但是已经在一些示例中使用过错误信息.Python至少有两种类型的错误:语法错 ...
- python3爬取”理财大视野”中的股票,并分别写入txt、excel和mysql
需求:爬取“理财大视野”网站的排名.代码.名称.市净率.市盈率等信息,并分别写入txt.excel和mysql 环境:python3.6.5 网站:http://www.dashiyetouzi.co ...
- 线段树、前缀数组:HDU1591-Color the ball(区间更新、简单题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...