HDU 6138 Fleet of the Eternal Throne 多校#8 AC自动机

专转本-信息通信技术-笔记 阅读详情

题意:给出n(<=1e5)个串(总长度<=1e5),以及q(<=300,数据有点弱,q改成1e5才好)次询问,每次询问给出x和y,表示输入的第x个和第y个串,要求找出一个最长的字串p,满足:p是x的字串,p是y的字串,且p是这n个串中某一个(可以是多个)的前缀,输出这个最大的长度。

参考http://blog.youkuaiyun.com/wubaizhe/article/details/77431875
果然对于ac自动机一点都不熟。居然找了那么久才找到sb错误。。。
收货:

  1. 可以把所以的字符串都放到一个长的s中,只要有pos标记就可以了。。然后+len+1来切断。。
#include<algorithm>
#include<vector>
#include<cstring>
#include<string>
#include<iomanip>
#include<cstdio>
#include<stack>
#include<iostream>
#include<map>
#include<queue>
#include<cmath>
#include<strstream>
using namespace std;
#define sf scanf
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a));
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define MP make_pair
#define N 1000150
#define M 200020
#define mod 998244353
#define ULL unsigned long long
#define LL long long
#define inf 0x3f3f3f3f
//freopen("in.txt","r",stdin);
//2017年08月21日10:35:07      15min

int pos[N];
int dep[N];
char s[N];
int id[N];
struct Trie {
    int next[N][26],fail[N<<2];
    int col[N];
    int root,L;
    int newnode() {
        for(int i = 0;i < 26;i++)
            next[L][i] = -1;
        L++;
        return L-1;
    }
    inline int ID(char s){return s-'a';}
    void init() {
        mem(col,-1);
        L = 0;
        root = newnode();
    }
    void insert(char buf[]) {
        int len = strlen(buf);
        int now = root;
        for(int i = 0;i < len;i++) {
            int id=ID(buf[i]);
            if(next[now][id] == -1){
                next[now][id] = newnode();
                dep[next[now][id]]=i+1;
            }
            now = next[now][id];
        }
    }
    void build() {
        queue<int>Q;
        fail[root] = root;
        for(int i = 0;i < 26;i++)
            if(next[root][i] == -1)
                next[root][i] = root;
            else {
                fail[next[root][i]] = root;
                Q.push(next[root][i]);
            }
        while( !Q.empty() ) {
            int now = Q.front(); Q.pop();
            for(int i = 0;i < 26;i++)
                if(next[now][i] == -1)
                    next[now][i] = next[fail[now]][i];
                else {
                    fail[next[now][i]]=next[fail[now]][i];
                    Q.push(next[now][i]);
                }
        }
    }
    int query(char *s,int x,bool sta){
        int len=strlen(s),u=root,ans=0;
        for(int i=0;i<len;++i){
            int id=ID(s[i]);
            u=next[u][id];
            int tmp=u;
            while(tmp){
                if(!sta)col[tmp]=x;
                else if(col[tmp]==x)ans=max(ans,dep[tmp]);
                tmp=fail[tmp];
            }
        }
        return ans;
    }
}ac;
int main(){
    //freopen("in.txt","r",stdin);
    int T;sf("%d",&T);
    while(T--){
        ac.init();
        int n;sf("%d",&n);
        int now=0;
        rep(i,1,n){
            pos[i]=now;
            sf("%s",s+now);
            ac.insert(s+now);
            int len=strlen(s+now);
            now+=len+1;
        }
        ac.build();
        int q;sf("%d",&q);
        while(q--){
            int x,y;sf("%d%d",&x,&y);
            ac.query(s+pos[x],q,0);
            int ans=ac.query(s+pos[y],q,1);
            pf("%d\n",ans);
        }
    }
}
初探802.11协议(0)——PCF/DCF与CSMA/CA机制 IEEE802.11 CSMA/CA机制与DCF机制 阅读详情

相关推荐

海康工业相机 Could not find module MvCameraControl.dll(已解决)

【代码】海康摄像机 Could not find module MvCameraControl.dll(已解决)

hmbbpdx的博客 2223

hdu6138 多校2017 ac自动机or后缀数组

题目链接 题目大意:给定n个字符串,m个询问,对于每一个询问,给出x,y 问第x个串和第y个串的相同连续子串当中,作为其他(包括自己)串的前缀的最长长度。两种思路:第一种ac自动机 首先把所有的串建立一个fail树,那么对于询问把第一个串在树上跑一遍,把所有匹配的节点标记,然后让第二串跑一遍,如果遇到相同匹配的节点,记录当前的最大深度就可以了。 代码:#include<iostream> #i

touwangyi的博客 550

Elsevier投稿实战:从ESWA模板到录用通知的全流程拆解

本文详细拆解了Elsevier旗下期刊ESWA(Expert Systems With Applications)的投稿全流程,从模板选择、投稿系统操作到审稿意见回复和录用后注意事项。重点分享了单栏LaTeX模板调整、APA文献格式处理、Highlights撰写技巧等实战经验,帮助研究者高效完成投稿并提升录用概率。

weixin_32715349的博客 240

HDU6138(96/600)二分+贪心+hash

Problem Description The Eternal Fleet was built many centuries ago before the time of Valkorion by an unknown race on the planet of Iokath. The fate of the Fleet’s builders is unknown but their legac

NineFailure的博客 659

Miniconda3迁移(附图详细过程)

服务器上目录占满,想要将conda迁移到其他目录下的操作方法,详细教程。

2301_77554343的博客 6942

STM32H743IIT6上LVGL移植实战:从零到触摸屏驱动的完整配置流程

本文详细记录了在STM32H743IIT6高性能MCU上,从零开始移植LVGL图形库到7寸RGB触摸屏的完整实战流程。内容涵盖工程搭建、显示与触摸驱动配置、LVGL核心优化及常见问题排查,重点讲解了如何利用STM32H743的硬件特性(如DMA2D、LTDC)提升GUI性能,为嵌入式GUI开发提供了一份详实的配置指南。

spark7igniter的博客 549

HDU6138:Fleet of the Eternal Throne(后缀自动机)

传送门 题解: 每次询问时对询问的两个串xx和yy分别做: 建后缀自动机,求出每个串是这个串的子串的最长前缀。 每个串对xx和yy的答案取min,所有串的答案取max即可。 时间复杂度O(nm)O(nm) #include &lt;bits/stdc++.h&gt; using namespace std; const int N=1e5+50; char ch[N]; int n...

DZYO的博客 315

GraphRAG 与 HippoRAG 深度对比:在 RAGFlow 中如何选择知识图谱方案?

本文深入对比了GraphRAG与HippoRAG在RAGFlow中的知识图谱构建方案,分析了两者在技术架构、资源消耗和场景适配性上的核心差异。GraphRAG适合需要快速响应和资源有限的场景,而HippoRAG则更适用于精确关系推理的专业领域。文章还提供了RAGFlow的演进路线和选型决策框架,帮助架构师根据实际需求做出合理选择。

weixin_27889245的博客 246

HDU6138

先构造AC自动机,完了以后对于x,y,先用x把x的所有子串标记了,再用y去寻找是否y的子串为也是x的子串,根据字典树的性质,这已经保证了一定是原先某字串的前缀了。一开始T掉我还以为数据卡的恨死,结果是小细节错误,while(v && !ch[v][c])写成了while(!ch[v][c])导致死循环,xushu教了几个细节,不用吧所有串压到一个char数组里后面再调取,直接记录每个串的末尾节点,

binarycopycode 395

Python在Genesis2000 CAM软件中的编程应用

Genesis2000是一款功能强大的计算机辅助制造(CAM)软件,它提供了广泛的功能和工具,用于帮助制造商进行CAD(计算机辅助设计)到CAM的转换。在Genesis2000中,我们可以利用Python的灵活性和功能来扩展软件的自定义能力,并通过编写脚本来自动化各种制造任务。例如,假设我们需要在Genesis2000中添加一个新的操作,用于自动计算零部件的重量。我们可以编写一个Python脚本,通过遍历模型的几何数据并应用相关的计算公式,来实现这个功能。

PixelEnigma的博客 2423

统计学习导论(ISLR) 第四章分类算法课后习题

统计学习导论(ISLR) 参考资料: The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导论(ISLR)(二):统计学习概述 统计学习导论(ISLR)(三):线性回归 统计学习导论(ISLR)(四):分类 ISLR统计学习导论之R语言应用(二):R语言基础 ISLR统计学习导论之R语言应用(三):线性回归R语言代码实战 ISLR统计学习导论之R语言应用(四):分类算法R语言代码实战 统计学习导论

阿里云专家博主、数据科学领域优质创作者、统计er在读 2万+

杭电2019暑期多校第一场题解

Blank 定义dp[i][j][k][t]dp[i][j][k][t]dp[i][j][k][t]代表填完前ttt个位置后,{0,1,2,3}\{0,1,2,3\}{0,1,2,3}这4个数字最后一次出现的位置,排序后为i,j,k,t(i&lt;j&lt;k&lt;t)i,j,k,t(i&lt;j&lt;k&lt;t)i,j,k,t(i<j&...

qq_42802219的博客 342

Keil uVision5 STM32 startup_stm32f10x_md_vl.s error A3906U Malformed via file target not created..

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2774

HDU 6138 2017多校第八场1006 Fleet of the Eternal Throne :AC自动机

题意:给出n( 题解:对n个串造出 自动AC机 ,这里的AC机不需要维护单词的结束点  需要维护一个每个节点到根的距离,也就是前缀的长度。然后用x跑一遍AC机,在所有匹配成功的结束节点上记上一个标记(直接记成询问次数就行了:第一次询问flag记成1,第二次记成2,这样保证每次的flag都不一样就不用清空标记了),然后这些标记点的意思就是:这个前缀是n个串中某个的前缀,且这个前缀是串x的字串。然后

辣鸡葫芦娃 1761

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HDU 6138 AC自动机

题目链接比赛时队友轻松切掉的水题= =,但我是最近抽时间学了一下AC自动机才理解了此题的正确思路。个人感觉AC自动机就是一棵升级的TrieTrie树,构造的思想又和KMPKMP雷同,入门还是非常容易的~思路: 将所有串都丢进AC自动机,每个节点记录一下深度。 每个询问对自动机询问两次,第一次询问进行染色,第二次询问针对染色过的节点更新答案。代码:#include<queue> #include<

新熊君的博客 684

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HDU 6138 Fleet of the Eternal Throne

自己的模板 #include #include #include #include #include using namespace std; struct node { node* next[26]; node* trien,*father; int value ,flag; node(char value,node* father):flag(0),value

但求心安的博客 362

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

hdu6138 Fleet of the Eternal Throne AC自动机

题目:给你n个字符串,m个询问,问x,y这两个字符串的最长子串,并且这个子串也是某个字符串的前缀。 思路:AC自动机,n个串插入自动机中,在用x串跑一遍自动机,把经过的点标记下来,再用y串跑一遍,看这个点是否走过,走过的话,就有可能成为答案。 代码: #pragma comment(linker, "/STACK:1024000000,1024000000") #include #inclu

ACVevtor的博客 752

【2019多校第一场补题 / HDU6578】2019多校第一场A题1001Blank——dp

HDU6578链接 题意 有一串字符串,仅由 {0,1,2,3}\{0, 1, 2, 3\}{0,1,2,3} 组成,长度为 nnn,同时满足 mmm 个条件。每个条件由三个整数组成:l、r、xl、r、xl、r、x 表示在这个字符串的 [l,r][l, r][l,r] 这个区间内,至少有 xxx 个不同的字符,求问可能的组合有多少种(mod 998244353) 分析题意 因为前几天刚刚写了牛客暑...

AC不动机的博客 555

hdu 6138 ac自动机

Problem Description > The Eternal Fleet was built many centuries ago before the time of Valkorion by an unknown race on the planet of Iokath. The fate of the Fleet's builders is unknown but their l

扬帆起航 457

hdu6138(后缀数组)

hdu6138 题意 给出若干个字符串,每次查询两个字符串,求两个字符串的公共子串且在给出的某一个字符串中作为前缀的最大长度。 分析 求公共子串:后缀数组 判断前缀:字典树 求完后缀数组,遍历下 \(height\) 数组,对于每个公共子串,都去跑下字典树。 这么暴力竟然没超时,还跑得飞快,数据好水。 code #include<bits/stdc++.h> using namespa...

weixin_34277853的博客 144

2020牛客暑期多校训练营(第二场)A All with Pairs —— AC自动机,广义后缀自动机

This way 题意: 给你n个字符串,任意选两个字符串,答案加上前一个字符串前缀和后一个字符串的后缀最长相同的部分长度的平方。问你答案是多少 题解: 想练一下AC自动机,就用这个写了,有时间的话再用广义后缀自动机写一下。 首先我们肯定是要枚举所有的字符串,问题是将它当做前缀还是后缀。把当前的字符串当成后缀的话,你的fail指针是这么跳的时候,会很难维护是否有的字符串的前缀已经被访问过了: 那么这种请况我一下子还想不出来怎么解决,有可能要用lca什么的吗?然后就换了一种思路:把当前枚举的字符串当成前缀,

天翼之城的博客 427

HDU 6138 Fleet of the Eternal Throne ( AC自动机)

Fleet of the Eternal Throne Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 291    Accepted Submission(s): 131 Problem Description

K键盘里的青春K 855

hdu 6138 Fleet of the Eternal Throne (ac自动机)

Fleet of the Eternal Throne Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 521    Accepted Submission(s): 239 Problem Description > T

咸鱼有梦想 348

2021杭电多校8

1003 Ink on paper (最小生成树)最小生成树 1003 Ink on paper (最小生成树) 任意门 题意: 给出n个点,每个点以0.5m/s的速度来扩展,然后问多久之后这几个点全部连在一起,输出时间的平方。 思路: 最小生成树板子,找到最长的把一条边,除以0.5,由于两个点是双向一起走的,所以t2t^2t2===(d20.5)2(\frac{\frac{d}{2}}{0.5})^2(0.52d​​)2=d2=d^2=d2 最小生成树 图的最小生成树,就是在这些边中选择N-1条出来,连.

qq_51408826的博客 261
上一篇: Theme Section HDU - 4763 (kmp)
下一篇: Codeforces 527C Glass Carving (set+multiset)
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值