致去年的我:这是道广义SAM模板题啊……

题意:

Description

Input

Output

HINT

$1\leq N\leq 20$,$1\leq Q\leq 10^5$,字符串总长$\leq 10^6$

题解:

题意就是求若干个trie的最长公共子串……

先把所有trie并起来建广义SAM,记录一下每个节点原来属于哪个trie,由于$N$很小,可以直接状压DP,按照parent树从上往下转移就好了……

预处理答案,询问可以$O(1)$处理;

但是本题有一个坑点是广义SAM必须要bfs建立以达到严格$O(n\times 字符集大小)$的时间复杂度,否则会被特殊构造的数据卡到85分。

代码:

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
using namespace std;
typedef long long ll;
typedef double db;
int n,qq,t,top,len,last,cnt=,tot=,rt=,rts[],s1[],s2[],son[][],fa[],mx[],s[],p[],ch[][],ss[],f[];
char st[],nw[],qr[];
queue<int>q;
void ins(char *s,int len,int id){
int nw=rts[len-];
if(!ch[nw][s[len]-'a'])ch[nw][s[len]-'a']=++cnt;
ss[ch[nw][s[len]-'a']]|=id;
rts[len]=ch[nw][s[len]-'a'];
}
int extend(int p,int ch,int id){
int np=++tot;
mx[np]=mx[p]+;
s[np]=id;
for(;p&&!son[p][ch];p=fa[p])son[p][ch]=np;
if(!p)fa[np]=rt;
else{
int q=son[p][ch];
if(mx[q]==mx[p]+)fa[np]=q;
else{
int nq=++tot;
s[nq]=id;
mx[nq]=mx[p]+;
memcpy(son[nq],son[q],sizeof(son[q]));
fa[nq]=fa[q];
fa[q]=fa[np]=nq;
for(;p&&son[p][ch]==q;p=fa[p])son[p][ch]=nq;
}
}
return last=np;
}
void build(){
q.push(rt);
p[rt]=;
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=;i<;i++){
int v=ch[u][i];
if(v){
p[v]=extend(p[u],i,ss[v]);
q.push(v);
}
}
}
for(int i=;i<=tot;i++)s1[mx[i]]++;
for(int i=;i<=tot;i++)s1[i]+=s1[i-];
for(int i=;i<=tot;i++)s2[s1[mx[i]]--]=i;
for(int i=tot;i;i--){
s[fa[s2[i]]]|=s[s2[i]];
f[s[s2[i]]]=max(f[s[s2[i]]],mx[s2[i]]);
}
}
int main(){
scanf("%d",&n);
rts[]=;
for(int i=;i<=n;i++){
scanf("%s",st);
len=strlen(st);
top=;
for(int j=;j<len;j++){
if(st[j]=='<')top--;
else{
nw[++top]=st[j];
ins(nw,top,<<(i-));
}
}
}
build();
for(int i=(<<n)-;i>=;i--){
for(int j=;j<n;j++){
if((<<j)&i){
f[i^(<<j)]=max(f[i^(<<j)],f[i]);
}
}
}
scanf("%d",&qq);
while(qq--){
scanf("%s",qr);
len=strlen(qr);
t=;
for(int i=len-;i>=;i--)t=t*+qr[i]-'';
printf("%d\n",f[t]);
}
return ;
}

【XSY2384】【GDOI2017】微信的更多相关文章

  1. SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机、状压DP)

    手动博客搬家: 本文发表于20181217 23:54:35, 原地址https://blog.csdn.net/suncongbo/article/details/85058680 人生第一道后缀自 ...

  2. 微信企业号 获取AccessToken

    目录 1. AccessToken介绍 2. 示例代码 1. AccessToken介绍 1.1 什么是AccessToken AccessToken即访问凭证,业务服务器每次主动调用企业号接口时需要 ...

  3. 微信小程序开发心得

    微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...

  4. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  5. 微信应用号(小程序)开发IDE配置(第一篇)

    2016年9月22日凌晨,微信宣布“小程序”问世,当然只是开始内测了,微信公众平台对200个服务号发送了小程序内测邀请.那么什么是“小程序”呢,来看微信之父怎么说 看完之后,相信大家大概都有些明白了吧 ...

  6. SQLSERVER走起微信公众帐号已经开通搜狗微信搜索

    SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...

  7. SQLSERVER走起微信公众帐号全新改版 全新首页

    SQLSERVER走起微信公众帐号全新改版 全新首页 今天,SQLSERVER走起微信公众帐号增加了首页功能 虽然还是订阅号,不过已经对版面做了比较大的修改,希望各位亲用得放心.用得安心O(∩_∩)O ...

  8. 微信小程序体验(2):驴妈妈景区门票即买即游

    驴妈妈因为出色的运营能力,被腾讯选为首批小程序内测单位.驴妈妈的技术开发团队在很短的时间内完成了开发任务,并积极参与到张小龙团队的内测问题反馈.驴妈妈认为,移动互联网时代,微信是巨大的流量入口,也是旅 ...

  9. WPF 微信 MVVM

    公司的同事离职了,接下来的日子可能会忙碌,能完善DEMO的时间也会少了,因此,把做的简易DEMO整体先记录一下,等后续不断的完善. 参考两位大神的日志:WEB版微信协议部分功能分析.[完全开源]微信客 ...

随机推荐

  1. Codeforces444A_DZY Loves Physics

    DZY Loves Physics time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  2. Vultr好server不敢独享

    Vultr是一家美国2014年成立的新公司.瞬间红遍世界,他是干什么的?他是serverVPS(Virtual Private Server)提供商,这个价格真实惊人的廉价5美金/月.折合人民币30元 ...

  3. Memcache 和 Radis 比较

    Memcache 和 Radis 比较 2014-03-28 11:00 2447人阅读 评论(0) 收藏 举报  分类: memcache(6)  Redis(7)  版权声明:本文为博主原创文章, ...

  4. HDU 1143 Tri Tiling

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=1143 Tri Tiling Time Limit: 2000/1000 MS (Java/Others) ...

  5. nyoj170 网络的可靠性(第三届河南省程序设计大赛)

    题目170 题目信息 执行结果 pid=170" style="text-decoration:none; color:rgb(55,119,188)">本题排行 ...

  6. DotNetBar.Bar菜单的使用

    DotNetBar.Bar菜单的使用 老帅     在C#中使用控件DevComponents.DotNetBar.Bar时,怎样设计菜单呢?      1.拖放生成一个菜单容器      拖放一个D ...

  7. LDA解决的问题

    人类是怎么生成文档的呢?LDA的这三位作者在原始论文中给了一个简单的例子.比如假设事先给定了这几个主题:Arts.Budgets.Children.Education,然后通过学习训练,获取每个主题T ...

  8. (转)一个vue路由参数传递的注意点

    首先我的路由的定义 { path: '/b', name: 'B', component: resolve => require(['../pages/B.vue'], resolve) } 我 ...

  9. opengl渲染时画面抖动

    渲一个大尺寸模型的时候模型的细节部分一直在闪烁.尝试: 1. 纹理用mipmap,失败. 2. 开启msaa,失败. 3. 相机近时不闪,越远闪的越厉害,怀疑是深度争夺,就把远裁剪平面调大,失败. - ...

  10. Python Django中QQ邮箱授权码问题

    Python Django中QQ邮箱授权码问题 系统及软件版本如下: Ubuntu Kylin 16.04 Python 3.5.1 Django 1.9.7 PyCharm Community Ed ...