致去年的我:这是道广义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. REST当道,NO MVC

    前世今生 B/S开发经历了几个时代,如今已经是后MVC时期了. MVC体现了分层和解耦合的概念.从功能和理念上都做出过巨大贡献,使Java B/S开发在面对大型项目时从容不迫,说成是上个十年Java ...

  2. Linux - 环境变量与位置变量

    环境变量 [root@local ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 注:只有自己执行 ...

  3. 国内物联网平台初探(六) ——庆科云FogCloud

    平台定位 FogCloud 快速接入智能硬件 FogCloud为开发者提供便捷的智能硬件接入服务,真正实现敏捷开发,快速迭代. FogCloud提供功能强大的云端服务 包括 产品/APP管理 ,消息通 ...

  4. php实现简单验证码的功能

    php实现简单验证码的功能 <!DOCTYPE html> <html> <head lang="en"> <meta charset=& ...

  5. js设计模式-命令模式

    命令模式是一种组织型模式,主要用在把调用对象(用户界面.API和代理等)与实现操作的对象隔离开.也就是说 ,凡是两个对象间的互动方式需要更高的模块化程度时都可以用到这种模式. 命令模式的好处:1.提高 ...

  6. SwiftUI 官方教程(七)

    7. 给子 View 传递数据 LandmarkDetail 现在依然使用硬编码的数据来显示地标.像 LandmarkRow 一样,LandmarkDetail 类型和它组合的其他 view 都需要一 ...

  7. Gerapy 使用详解

    https://blog.csdn.net/fengltxx/article/details/79894839

  8. NOIP2014 day2 t2 寻找道路

    寻找道路 NOIP2014 day2 t2 描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指向的 ...

  9. History of the browser user-agent string--转

    https://webaim.org/blog/user-agent-string-history/ In the beginning there was NCSA Mosaic, and Mosai ...

  10. IOS-UITextField-改变光标颜色

    方法1: [[UITextField appearance] setTintColor:[UIColor blackColor]]; 这种方法将影响所有TextField. 方法2: textFiel ...