SP8093 JZPGYZ - Sevenk Love Oimaster 解题报告
SP8093 JZPGYZ - Sevenk Love Oimaster
题目大意
给定\(n(n\le 10000)\)个模板串,以及\(m(m\le 60000)\)个查询串(模板串总长\(\le 100000\),询问串总长\(\le 360000\))
依次查询每一个查询串是多少个模板串的子串
先对模板串建广义SAM(每次新串las=1的那种)
然后考虑每个点都有一个所属的模板串,它可以对par树上到跟的那条链产生贡献,可以暴力加,据说均摊\(O(n\sqrt n)\),不清楚...
反正是链的问题,不如直接转换成子树问题。
然后发现询问就变成了查询某个点子树和,放到dfs序上发现是区间数颜色,可以离线
于是像HH的项链那样直接树状数组维护一下就可以了。
Code:
#include <cstdio>
#include <cstring>
#include <algorithm>
const int N=2e5+10;
int len[N],par[N],ch[N][26],col[N],id,tot=1,las=1;
void extend(int c)
{
int now=++tot,p=las;
len[now]=len[p]+1,col[now]=id;
while(p&&!ch[p][c]) ch[p][c]=now,p=par[p];
if(!p) par[now]=1;
else
{
int x=ch[p][c];
if(len[x]==len[p]+1) par[now]=x;
else
{
int y=++tot;
len[y]=len[p]+1,par[y]=par[x],col[y]=id;
memcpy(ch[y],ch[x],sizeof ch[x]);
while(p&&ch[p][c]==x) ch[p][c]=y,p=par[p];
par[now]=par[x]=y;
}
}
las=now;
}
int head[N],to[N],Next[N],cnt;
void add(int u,int v)
{
to[++cnt]=v,Next[cnt]=head[u],head[u]=cnt;
}
int dfn[N],low[N],ha[N],dfsclock;
void dfs(int now)
{
ha[dfn[now]=++dfsclock]=now;
for(int i=head[now];i;i=Next[i]) dfs(to[i]);
low[now]=dfsclock;
}
struct node
{
int id,l,r;
node(){}
node(int id,int l,int r){this->id=id,this->l=l,this->r=r;}
bool friend operator <(node n1,node n2){return n1.r<n2.r;}
}q[N];
int n,m,m_,pre[N],su[N],ans[N];
char s[N];
void modify(int x,int d){while(x<=dfsclock)su[x]+=d,x+=x&-x;}
int query(int x){int s=0;while(x)s+=su[x],x-=x&-x;return s;}
int main()
{
scanf("%d%d",&n,&m);
for(id=1;id<=n;id++)
{
scanf("%s",s+1);
las=1;int k=strlen(s+1);
for(int j=1;j<=k;j++) extend(s[j]-'a');
}
for(int i=2;i<=tot;i++) add(par[i],i);
dfs(1);
for(int i=1;i<=m;i++)
{
scanf("%s",s+1);
int now=1,k=strlen(s+1);
for(int j=1;j<=k;j++)
{
now=ch[now][s[j]-'a'];
if(!now) break;
}
if(now) q[++m_]=node(i,dfn[now],low[now]);
}
std::sort(q+1,q+1+m_);
for(int j=1,i=1;i<=dfsclock;i++)
{
int color=col[ha[i]];
if(pre[color]) modify(pre[color],-1);
modify(pre[color]=i,1);
while(j<=m_&&q[j].r<=i) ans[q[j].id]=query(q[j].r)-query(q[j].l-1),++j;
}
for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
return 0;
}
2019.1.10
SP8093 JZPGYZ - Sevenk Love Oimaster 解题报告的更多相关文章
- SP8093 JZPGYZ - Sevenk Love Oimaster(广义后缀自动机)
题意 题目链接 Sol 广义后缀自动机板子题..和BZOJ串那个题很像 首先建出询问串的SAM,然后统计一下每个节点被多少个串包含 最后直接拿询问串上去跑就行了 #include<bits/st ...
- SP8093 JZPGYZ - Sevenk Love Oimaster(SAM)
/* 打模板题啊 每个串影响到的集合直接枚举跳parent处理即可 */ #include<cstdio> #include<algorithm> #include<cs ...
- SP8093 JZPGYZ - Sevenk Love Oimaster
传送门 广义后缀自动机-- 其实也不是很难理解,就是每次SAM插入一个串之后,插入新的串的时候,要把last重新调到1的位置,共用一些节点. 这个题我们首先要预处理出来每个状态被多少个串共用.挺暴力的 ...
- 【洛谷 SP8093】 JZPGYZ - Sevenk Love Oimaster(后缀自动机)
题目链接 广义sam.. #include <cstdio> #include <cstring> #include <algorithm> using names ...
- SPOJ 8093 JZPGYZ - Sevenk Love Oimaster
思路 可以用复杂度不对的做法水过去 相当于求parent树子树中的颜色种数,可以离线后树状数组(HH的项链,询问右端点排序之后维护last),dsu on tree,莫队都可以 但是也可以记录每个点上 ...
- SPOJ8093【JZPGYZ - Sevenk Love Oimaster】
怎么全是广义后缀自动机,我\(AC\)自动机不服 这道题可以使用的算法很多,\(SA\)或者\(SAM\)应该都可以 但是我都不会 但是这毕竟是一个多串匹配问题,\(AC\)自动机还是可以刚一刚的 我 ...
- BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster [广义后缀自动机]
JZPGYZ - Sevenk Love Oimaster Oimaster and sevenk love each other. But recently,sevenk hea ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
随机推荐
- Docker一键部署Hadoop心得(一)
最近一直在折腾使用docker一键部署全分布式hadoop集群,虽然一键部署的脚本写好了并且可以成功运行出各个节点,但在运行一个wordcount实例时出现了错误,错误如下: java.io.IOEx ...
- 【stylus】stylus在webstrom中的识别
<style lang="stylus" rel="stylesheet/stylus"> @import './common/stylus/mix ...
- WPF listview Test Message list
UI: <Window x:Class="WoZhuLianyuanTool.SendContentsWind" xmlns="http://schemas.mic ...
- vb6/ASP FORMAT MM/DD/YYYY
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关.意思是尽管你用诸如 F ...
- 20155237 2016-2017-2 《Java程序设计》第十周学习总结
20155237 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 计算机网络,是指分布在不同地理区域的计算机用通信线路互连起来的一个具有强大功能的网络系统.网 ...
- HTTPUTILS
maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&g ...
- MFC CHotKeyCtrl控件
知识点: CHotKeyCtrl控件 获取热键数据 注册热键 响应热键事件 一.CHotKeyCtrl控件 void SetHotKey( WORD wVirtualKeyCode, WORD wMo ...
- ssh无法登录,提示Connection closing...Socket close.
一.问题无法ssh直接连接到服务器 [C:\~]$ ssh 192.168.7.77 Connecting to ... Connection established. To escape to lo ...
- mac终端将本地代码push到github总结
1.创建一个github账号 2.在本地目录下创建一个本地仓库,用来存放代码 mkdir prepass_repository (/Users/gejuncheng/文件/prepass_reposi ...
- CS190.1x Scalable Machine Learning
这门课是CS100.1x的后续课,看课程名字就知道这门课主要讲机器学习.难度也会比上一门课大一点.如果你对这门课感兴趣,可以看看我这篇博客,如果对PySpark感兴趣,可以看我分析作业的博客. Cou ...