【BZOJ 2754 喵星球上的点名】
Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 2512 Solved: 1092
[Submit][Status][Discuss]
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
2
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。
Source
【题解】
①我只会后缀数组(AC自动机不熟,后面补上)
②很无脑地做:把所有东西连在一起(加上不同!连接符!),记下bl[i](i位置属于第几个点姓名串)和st[i]第i个点名串的开头位置,枚举串,在sa里往前后找,并统计答案;
③很朴素的去重:记下vis,找到一次就标记;
④数据水了吧
/*2 3
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
喵星人的输出好萌啊~~ Presentation_Error
后缀数组 后缀数组 后缀数组 后缀数组 后缀数组 后缀数组 后缀数组 后缀数组
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <ctime>
#include <cmath>
#define inf 0x3f3f3f3f
#define ll long long
#define N 500100
#define Maxs 10001
#define mem(f,a) memset(f,a,sizeof(f))
#define Run(i,l,r) for(int i=l;i<=r;i++)
#define Don(i,l,r) for(int i=l;i>=r;i--)
#define Eun(i,u,E,head) for(int i=head[u],v=E[i].v;i!=-1;i=E[i].next,v=E[i].v)
using namespace std;
int n,m;
int s[N],x[N],y[N],c[N],sa[N],Ht[N],Rk[N];
int vis[N],bl[N],st[N],len[N];
int ans1[N],ans2[N];
void Build_sa(int n,int m)
{ Run(i,,m) c[i]=;
Run(i,,n-) c[x[i]=s[i]]++;
Run(i,,m) c[i]+=c[i-];
Don(i,n-,) sa[--c[x[i]]]=i;
int p;
for (int k=;k<=n;k<=){
p=; Run(i,n-k,n-) y[p++]=i;
Run(i,,n-) if (sa[i]>=k) y[p++]=sa[i]-k;
Run(i,,m) c[i]=;
Run(i,,n-) c[x[y[i]]]++;
Run(i,,m) c[i]+=c[i-];
Don(i,n-,) sa[--c[x[y[i]]]]=y[i];
p=; swap(x,y);
x[sa[]]=;
Run(i,,n-){
x[sa[i]]=(y[sa[i]]==y[sa[i-]]&&y[sa[i]+k]==y[sa[i-]+k])? p-: p++;
}
if (p==n) break;
m=p;
}
}
void Build_Ht(int n)
{ Run(i,,n-) Rk[sa[i]]=i;
int k=;
Run(i,,n-){
if (k) k--;
int j=sa[Rk[i]-];
while (s[i+k]==s[j+k]) k++;
Ht[Rk[i]]=k;
}
}
int main()
{ freopen("name.in","r",stdin);
freopen("name.out","w",stdout);
scanf("%d%d",&n,&m);
int tot=;
Run(i,,n){
int num;
scanf("%d",&num);
Run(j,,num) scanf("%d",&s[tot]),s[tot]++,bl[tot++]=i;
scanf("%d",&num);
s[tot++]=Maxs+;
Run(j,,num) scanf("%d",&s[tot]),s[tot]++,bl[tot++]=i;
s[tot++]=Maxs+;
}
Run(i,,m){
int num;
scanf("%d",&num);
st[i]=tot;len[i]=num;
Run(j,,num) scanf("%d",&s[tot]),s[tot++]++;
s[tot++]=Maxs+;
}
s[tot++]=;
Build_sa(tot,Maxs+);
Build_Ht(tot);
Run(i,,m){
int p,q;
p=q=Rk[st[i]];
while (Ht[p]>=len[i]){
int x=bl[sa[--p]];
if (!x) continue;
if (vis[x]!=i) ans1[i]++,ans2[x]++,vis[x]=i;
}
while (Ht[q+]>=len[i]){
int x=bl[sa[++q]];
if (!x) continue;
if (vis[x]!=i) ans1[i]++,ans2[x]++,vis[x]=i;
}
}
Run(i,,m) printf("%d\n",ans1[i]);
Run(i,,n) printf("%d ",ans2[i]);
return ;
}//by tkys_Austin;
【BZOJ 2754 喵星球上的点名】的更多相关文章
- BZOJ 2754 喵星球上的点名(后缀数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2754 题意:给出n个字典串,m个询问串.输出每个询问串出现在多少个字典串中.最后输出每个 ...
- 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\)自动机 然后把名字丢进去进行匹配, 大力统计一下答 ...
随机推荐
- 英特尔® 实感™ 摄像头 (F200) 应用如何实现最佳用户体验
英特尔开发人员专区原文 由于视频不能直接嵌入, 请点击视频标题观看.谢谢. 英特尔® 实感™ 技术支持我们重新定义如何与计算设备交互,包括允许用户通过手势自然交互. 为了帮助大家了解使用英特尔® 实感 ...
- Windows单机配置Kafka环境
首先确保机器已经安装好Zookeeper,Zookeeper安装参考 Windows单机配置Zookeeper环境 然后确保Zookeeper是正常启动状态 下载Kafka http://kafka. ...
- 洛谷【P1052】过河
https://www.luogu.org/problemnew/show/P1052 题目描述 在河上有一座长度为 L 的独木桥, 一只青蛙想沿着独木桥从河的一侧跳到另一侧. 在桥上有一些石子, 青 ...
- 33.[LeetCode] Search in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- windows64系统下安装 redis服务 (详细)
Linux下Redis安装链接 : 转到 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表) ...
- spring mvc 详细配置
转自: http://www.cnblogs.com/superjt/p/3309255.html 现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是 ...
- Scrum立会报告+燃尽图(十一月二十四日总第三十二次):视频剪辑
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- 互评Alpha版本——可以低头,但没必要——取件帮
基于NABCD评论作品,及改进建议: 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 随着电商平台的发展,越来越多的人选择网购,但是东师的一部分快递网点不在校内,需要走很长的一 ...
- 基于spec评论作品 - 探路者 贪吃蛇
基于spec评论作品,试用(并截图)所有其他小组的Alpha作品,与软件功能说明书对比,评论Alpha作品对软件功能说明书的实现. 首先通过命令行进入到游戏主页面中. 因为软件没有编译为exe程序,所 ...
- UVALive 6913 I Want That Cake 博弈+dp
题目链接: http://acm.hust.edu.cn/vjudge/problem/96343 I Want That Cake Time Limit: 3000MS 64bit IO Forma ...