BZOJ 2754 喵星球上的点名(后缀数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2754
题意:给出n个字典串,m个询问串。输出每个询问串出现在多少个字典串中。最后输出每个字典串中含有多少个询问串。
思路:将所有字典串和所有询问串连在一起求sa和h数组。统计时对于每个询问串,设长度为len,向前向后扫一下h值大于等于len的区间。然后在这个区间中看有多少个字典串,就是这个询问串的答案,同时将这些字典串包含询问串个数加1。
int r[N],sa[N],wa[N],wb[N],wd[N],rank[N],h[N];
int cmp(int *r,int a,int b,int len)
{
return r[a]==r[b]&&r[a+len]==r[b+len];
}
void da(int *r,int *sa,int n,int m)
{
int i,j,p,*x=wa,*y=wb,*t;
FOR0(i,m) wd[i]=0;
FOR0(i,n) wd[x[i]=r[i]]++;
FOR1(i,m-1) wd[i]+=wd[i-1];
FORL0(i,n-1) sa[--wd[x[i]]]=i;
for(j=1,p=1;p<n;j<<=1,m=p)
{
p=0;
FOR(i,n-j,n-1) y[p++]=i;
FOR0(i,n) if(sa[i]>=j) y[p++]=sa[i]-j;
FOR0(i,m) wd[i]=0;
FOR0(i,n) wd[x[i]]++;
FOR1(i,m-1) wd[i]+=wd[i-1];
FORL0(i,n-1) sa[--wd[x[y[i]]]]=y[i];
t=x;x=y;y=t;p=1;x[sa[0]]=0;
FOR1(i,n-1) x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;
}
}
void calHeight(int *r,int *sa,int n)
{
int i,j,k=0;
FOR1(i,n) rank[sa[i]]=i;
FOR0(i,n)
{
if(k) k--;
j=sa[rank[i]-1];
while(i+k<n&&j+k<n&&r[i+k]==r[j+k]) k++;
h[rank[i]]=k;
}
}
int b[N];
int n,m,M;
set<int> S;
set<int>::iterator it;
int c[N],d[N];
int ans[N],ans1[N];
void deal(int n)
{
int i,j,L,R,len;
for(i=1;i<=n;i++) if(d[sa[i]])
{
S.clear(); len=c[d[sa[i]]];
for(j=i;j>=2;j--) if(h[j]<len) break;
L=j;
for(j=i+1;j<=n;j++) if(h[j]<len) break;
R=j-1;
for(j=L;j<=R;j++) if(sa[j]<=M) S.insert(b[sa[j]]);
ans[d[sa[i]]]=SZ(S);
for(it=S.begin();it!=S.end();it++)
{
ans1[*it]++;
}
}
}
int main()
{
RD(n,m);
int i,j,x,y,t=10002,p=0;
FOR1(i,n)
{
RD(x);
FOR1(j,x) RD(y),r[p]=y+1,b[p++]=i;
r[p]=t++;
b[p++]=0;
RD(x);
FOR1(j,x) RD(y),r[p]=y+1,b[p++]=i;
r[p]=t++;
b[p++]=0;
}
M=p-1;
FOR1(i,m)
{
RD(x); c[i]=x;
FOR1(j,x)
{
if(j==1) d[p]=i;
RD(y),r[p]=y+1,b[p++]=i;
}
if(i<m) r[p]=t++,b[p++]=0;
}
r[p]=0;
da(r,sa,p+1,t);
calHeight(r,sa,p);
deal(p);
FOR1(i,m) PR(ans[i]);
FOR1(i,n-1) printf("%d ",ans1[i]);
PR(ans1[i]);
}
转载于:https://www.cnblogs.com/jianglangcaijin/p/3456821.html
BZOJ 2754 喵星球上的点名(后缀数组)相关推荐
- bzoj 2754 [SCOI2012]喵星球上的点名 后缀数组+莫队
先把所有串按顺序放到一起,两个串间加非法字符隔开,求一个后缀数组. 然后对于询问,满足条件的子串在后缀数组上一定是连续一段区间. 这个区间的左右端点可以在读入的过程中二分求. 然后这个问题变成了多组询 ...
- [SCOI2012]喵星球上的点名(后缀数组+莫队+ST表)
传送门 这题是真的秀.一眼看下去感觉AC自动机很可做,第一个问比较好处理,dfs序即可搞定,可第二问有点抽象,目前对树形结构的知识点不足以支持我解决这个问题.所以舍弃AC自动机,用SA做. SA做法: ...
- [BZOJ2754][SCOI2012]喵星球上的点名 后缀数组
不科学啊...这题暴力可过...感觉所有串都是a就可以卡掉啊... 我的做法就是先把姓名串和询问串全部连在一起,并打上分隔符,并记录每个字符属于哪个串,求出SA.对于每个询问就从它所在的位置左右扫he ...
- BZOJ 2754: [SCOI2012]喵星球上的点名
二次联通门 : BZOJ 2754: [SCOI2012]喵星球上的点名 /*BZOJ 2754: [SCOI2012]喵星球上的点名此题有N种做法...见到众dalao用各种奇怪的姿势AC此题..具 ...
- SCOI2012 喵星球上的点名 BZOJ 2754
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 2246 Solved: 975 Description ...
- 喵星球上的点名(后缀自动机+dfs序+莫队)
喵星球上的点名 一道据传言有多种解法的题(不过大多是因为数据太弱过的).先用AC自动机搞了一上午,无果:看了题解,后缀自动机+莫队?正好是我最喜欢的算法之一+正在学习的算法,就这个了!然后由于广义自动 ...
- 【BZOJ2754】【SCOI2012】喵星球上的点名(后缀数组)
Description click me Solution 据说AC自动机可做?反正我使用后缀数组做的.. 把所有的串连在一起,用一个很大的数分割开来. 求出后缀数组,暴力地在height上找可以匹配 ...
- 【BZOJ2754】[SCOI2012]喵星球上的点名
[BZOJ2754][SCOI2012]喵星球上的点名 题面 bzoj 洛谷 题解 这题有各种神仙做法啊,什么暴力\(AC\)自动机.\(SAM\)等等五花八门 我这个蒟蒻在这里提供一种复杂度正确且常 ...
- bzoj2754【SCOI2012】喵星球上的点名
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1577 Solved: 710 [Submit][ ...
最新文章
- 大脑进化追不上社会文化:化石和脱氧核糖核酸证明人类大脑进化比社会慢
- Spring Cloud中Hystrix仪表盘与Turbine集群监控
- git指令快捷 idea_IDEA+Git+Gitlab使用详细教程
- 数据模型同学看过来|代码案例实操来袭
- Java:批量插入、修改数据到数据库中的用法
- python 工作量统计_如何获得Python多处理池剩余的“工作量”?
- Depth Map Prediction from a Single Image using a Multi-Scale Deep Network
- 正好股票开户指数大跌分解比较严重
- Excel高级应用高频使用函数汇总
- java word jar包_java操作word书签生成word模板不用jar包
- xsmax无法进入dfu模式_iPhoneXS/XSMax如何强制重启?如何进入恢复模式或DFU模式?...
- 如何清理和优化你的Mac:14个小技巧推荐给你!
- 在美国的电子工程师眼中的中国电子行业!
- [ERROR] Slave I/O: error connecting to master
- AVUE一些简单用法——avue-crud子表单
- ubuntu + eigen3 安装(解决 fatal error: Eigen/Core: No such file or directory)
- Linux 清理 firewalld 和 iptables 所有规则
- flowplayer播放_在iPad上自动播放Flowplayer
- [骑驴找马]ETAGEERF和Agent*Go
- DOS命令行下输入mount命令
热门文章
- 已知原函数和导函数的关系_根据函数表达式该如何求函数值
- 学习ES6路线了解图
- 事业单位计算机岗位考公基吗,江苏事业单位统考考公基吗
- php 2个时间查询差几天,PHP怎么计算2个日期差
- shell 启动java程序_Shell 脚本启动java程序
- python中tkinter模块_使用Python中的tkinter模块作图的方法
- html中transition默认,CSS3中的Transition详解
- android 序列化传参数,Android序列化之Parcelable和Serializable的使用详解
- 对讲机怎么用_对讲机防水透气解决方案是怎么做的?
- java中设置http响应头控制浏览器禁止缓存当前文档内容