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

Ubuntu双系统引导修复实战:boot-repair工具详解 本文详细介绍了使用boot-repair工具修复Ubuntu双系统引导丢失问题的实战方法。当GRUB引导菜单因安装新系统或更新而损坏时,通过制作Ubuntu启动盘进入Live环境,安装并运行boot-repair,可一键完成系统修复引导,自动化执行GRUB重装与配置,解决无法进入Windows或Ubuntu的常见故障。 阅读详情

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6138

题意:给出n个串以及m个询问,对于每个询问(x, y),回答串x和串y的最长公共连续子串,并且这个串还是n个串中任意一个串的前缀。

思路:将这n个串建立AC自动机,每个节点保存其到根节点的距离(即前缀的长度)。首先将串x在自动机上跑一遍,将经过的节点做个标记(表示串x可以匹配到这些节点所代表的前缀),再把串y在自动机上跑一遍,若其经过的节点已经存在标记,则说明这个节点所代表的前缀既能匹配x也能匹配y,更新最大答案即可。


#include<cstdio>
#include<cstring>
#include<string>
#include<cctype>
#include<iostream>
#include<set>
#include<map>
#include<cmath>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<algorithm>
#define fin freopen("1006.in","r",stdin)
#define fout freopen("a.txt","w",stdout)
typedef long long LL;
using namespace std;
typedef pair<int, int> P;
const int INF = 1e8 + 10;
const int maxn = 1e5 + 10;
const int maxnode = 1e5 + 10;
const int sigma_size = 26;
string text[maxn];
char in[maxn];
int vis, ans;

struct AC
{
	int ch[maxnode][sigma_size];
	int val[maxnode];
	int f[maxnode];
	int last[maxnode];
	int flag[maxnode];
	int sz;
	void init() { sz = 1; memset(ch[0], 0, sizeof ch[0]); }
	int idx(char c) { return c - 'a'; }

	void insert(string &s)
	{
		int u = 0, n = s.size();
		for(int i = 0; i < n; i++)
		{
			int c = idx(s[i]);
			if(!ch[u][c])
			{
				memset(ch[sz], 0, sizeof ch[sz]);
				val[sz] = i+1;
				ch[u][c] = sz++;
			}
			u = ch[u][c];
		}
	}

    int getFail()
    {
    	queue<int> q;
    	f[0] = 0;
    	for(int c = 0; c < sigma_size; c++)
    	{
    		int u = ch[0][c];
    		if(u) { f[u] = 0; q.push(u); last[u] = 0; }
    	}

    	while(!q.empty())
    	{
            int r = q.front(); q.pop();
            for(int c = 0; c < sigma_size; c++)
            {
            	int u = ch[r][c];
            	if(!u) { ch[r][c] = ch[f[r]][c]; continue; }
            	q.push(u);
            	int v = f[r];
            	while(v && !ch[v][c]) v = f[v];
            	f[u] = ch[v][c];
            	last[u] = val[f[u]] ? f[u] : last[f[u]];
            }
    	}
    }

    void print1(int j)
    {
        if(!j) return;
    	if(flag[j] != vis) flag[j] = vis;
    	print1(last[j]);
    }

     void print2(int j)
    {
        if(!j) return;
    	if(flag[j] == vis) ans = max(ans, val[j]);
    	print2(last[j]);
    }

    void Find1(string &T)
    {
    	int n = T.length();
    	int j = 0;
    	for(int i = 0; i < n; i++)
    	{
    		int c = idx(T[i]);
    		j = ch[j][c];
            if(val[j]) print1(j);
            else if(last[j]) print1(last[j]);
    	}
    }

    void Find2(string &T)
    {
        int n = T.length();
    	int j = 0;
    	for(int i = 0; i < n; i++)
    	{
    		int c = idx(T[i]);
    		j = ch[j][c];
            if(val[j]) print2(j);
            else if(last[j]) print2(last[j]);
    	}
    }

}ac;

int main()
{
	//fin; fout;
	int T;
	scanf("%d", &T);
	while(T--)
	{
		ac.init();
		int n, m, x, y;
		scanf("%d", &n);
		for(int i = 1; i <= n; i++) { scanf("%s", in); text[i] = in; ac.insert(text[i]);}
	    ac.getFail();
	    scanf("%d", &m);
		while(m--)
		{
			ans = 0;
			++vis;
            scanf("%d%d", &x, &y);
            ac.Find1(text[x]); ac.Find2(text[y]);
            printf("%d\n", ans);
		}
	}
	return 0;
}

Fleet of the Eternal Throne

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 568    Accepted Submission(s): 264


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 legacy would live on. Its first known action was in the annihilation of all life in Wild Space. It spread across Wild Space and conquered almost every inhabited world within the region, including Zakuul. They were finally defeated by a mysterious vessel known as the Gravestone, a massive alien warship that countered the Eternal Fleet's might. Outfitted with specialized weapons designed to take out multiple targets at once, the Gravestone destroyed whole sections of the fleet with a single shot. The Eternal Fleet was finally defeated over Zakuul, where it was deactivated and hidden away. The Gravestone landed in the swamps of Zakuul, where the crew scuttled it and hid it away.
>
> — Wookieepedia

The major defeat of the Eternal Fleet is the connected defensive network. Though being effective in defensing a large fleet, it finally led to a chain-reaction and was destroyed by the Gravestone. Therefore, when the next generation of Eternal Fleet is built, you are asked to check the risk of the chain reaction.

The battleships of the Eternal Fleet are placed on a 2D plane of  n  rows. Each row is an array of battleships. The type of a battleship is denoted by an English lowercase alphabet. In other words, each row can be treated as a string. Below lists a possible configuration of the Eternal Fleet.


aa
bbbaaa
abbaababa
abba


If in the  x -th row and the  y -th row, there exists a consecutive segment of battleships that looks identical in both rows (i.e., a common substring of the  x -th row and  y -th row), at the same time the substring is a prefix of any other row (can be the  x -th or the  y -th row), the Eternal Fleet will have a risk of causing chain reaction.

Given a query ( x ,  y ), you should find the longest substring that have a risk of causing chain reaction.
 

Input
The first line of the input contains an integer  T , denoting the number of test cases. 

For each test cases, the first line contains integer  n  ( n≤105 ).

There are  n  lines following, each has a string consisting of lower case letters denoting the battleships in the row. The total length of the strings will not exceed  105 .

And an integer  m  ( 1≤m≤100 ) is following, representing the number of queries. 

For each of the following  m  lines, there are two integers  x,y , denoting the query.
 

Output
You should output the answers for the queries, one integer per line.
 

Sample Input
  
1 3 aaa baaa caaa 2 2 3 1 2
 

Sample Output
  
3 3
 

Source
 

Recommend
liuyiding
 


一分钟理解 “熔断“, “限流“ 与 “降级“ 熔断,本质是一种“故障隔离”机制,用于当某个依赖服务出现持续故障(如响应超时、错误率飙升)时,暂时切断对该服务的调用,避免故障扩散到整个系统,防止“雪崩效应”;待依赖服务恢复正常后,再逐步恢复调用。其核心逻辑参考了现实中的“电路保险丝”——电路过载时,保险丝熔断,切断电路,保护电器不被烧毁;故障排除后,更换保险丝,电路恢复正常。闭合状态(Closed):正常状态,请求可以正常调用依赖服务,同时监控调用的错误率、超时率等指标。打开状态(Open) 阅读详情

相关推荐

小案例:利用图床自动化批量上传图片并获取图片链接

用python爬虫写了一个小脚本,用来自动上传图片到图床,然后返回链接,我们只需直接复制链接就可以。(需要安装Requests库) 因为不同图床需要提交的POST表单不一致,所以在这里我用ImgURL图床做示范,如果大家有需求,可自行修改代码。使用脚本的时候,我们只需把需要上传的图片和这个脚本放在同一个文件夹中,然后运行脚本,稍作等待,看到提示时就可以在脚本运行文件夹中发现一个名为“图片链接地址.txt”的文件,里面就是图片链接啦! 四、图片链接地址.txt(单张图片):...

采菊东篱下,Python满乾坤! 4409

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

2026年数据中心运行与管理专业人才培养基地建设方案(高职、数据中心运行与管理新专业、人才培养、专业代码:510310)

摘要: 为响应国家“东数西算”战略和数字经济需求,我校拟联合行业领军企业建设数据中心运行与管理人才培养基地。项目基于国家政策引导和产业快速发展背景,针对行业10万人才缺口,对标教育部新设专业标准(510310),分三阶段实施五年规划:专业奠基(2026-2028)、内涵深化(2028-2029)、辐射引领(2030-2031)。建设内容涵盖校企协同岗位能力分析、模块化课程开发(如网络管理、自动化运维等)、实训基地搭建及“课证融通”培养模式,重点培养基础设施、网络服务、运维托管三类岗位技能人才,目标建成区域性

啊碧根果的博客 1685

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

QuickFix Java 讲解(一)概述、下载方法,和协议内容

本系列力求手把手教你怎样利用QuickFix Java 搭建自己的 FIX 协议收法平台,以及其中的注意事项。 所有源码的地址(免费): https://github.com/zongzhec/QuickFixPractise 1. 什么是FIX,QuickFix,Quick Java? 1.1. 什么是FIX 官网以及其他翻译自官网的帖子都太官方了,这里我们设想一个情景: 你是一个交易员,现在客户打电话来让你下个单买点股票。你啪啪啪的在你的机器上熟练地输入了下单指令。系统显示:成...

4573

128x64 OLED屏的救星:手把手教你用纯C实现轻量级多级菜单

本文针对资源受限的单片机开发场景,提供了一套用纯C语言实现128x64 OLED屏轻量级多级菜单的完整方案。该方案摒弃了传统的树形指针结构,创新性地采用哈希表进行菜单项管理,核心代码不足200行,内存占用极低,逻辑清晰且易于维护。文章详细阐述了架构设计、实战演练及性能优化技巧,是STM32、ESP8266等小内存MCU项目的理想选择。

table的专栏 227

HDU 6138 Fleet of the Eternal Throne AC自动机||后缀数组

传送门:HDU6138 题意:给出n个串和q次询问,每次询问给出x和y,表示输入的第x个和第y个串,要求找出一个最长的子串p,满足:p是x的子串,p是y的子串,且p是这n个串中某一个(可以是多个)的前缀,问p的最大长度是多少。 思路:看官方题解还很麻烦的样子,不过看dalao们的思路一下就懂了。。 将所有串插入到AC自动机里去,然后对于每个询问,先在AC自动机上查询x串,并对每一个经过的节点

WA是一笔财富 318

用 sapgenpse 把 SAPCRYPTOLIB 的 SNC 真正配通

摘要: 在SAP系统中配置SNC(Secure Network Communications)时,sapgenpse工具是关键,尤其在旧版本或组件缺乏图形化维护工具时。核心步骤包括安装SAP Cryptographic Library、创建PSE(Personal Security Environment)、生成运行凭据,并确保证书交换顺序正确。常见问题如RFC连接失败或握手错误,往往源于PSE创建或凭据配置不当。需特别注意SECUDIR目录设置、PSE身份管理(单一或独立PSE方案)、以及服务账号凭据的权

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 66

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

Fleet of the Eternal ThroneHDU 6138 (AC自动机) 2017ACM暑期多校联合训练 - Team 8 1006 Fleet of the Eternal Throne题目链接Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi

南风古 350

LPDDR6 技术标准详解(JESD209-6)

是继 LPDDR5/5X 之后的新一代低功耗 DRAM 标准,专为满足移动终端、AI、边缘计算等高带宽、低功耗场景而设计。该标准通过全新架构、动态功耗控制机制和增强型数据完整性机制,实现性能、能效与可靠性的全面升级。LPDDR6 并非仅是速度升级,更是内存架构设计思路的演进,围绕“低功耗 + 高带宽 + 强安全”的三维目标,构建下一代 SoC 平台关键基础。✅ 高带宽:支持 32B/64B 动态突发✅ 低功耗:动态电压、通道切换✅ 高可靠性:ECC + 自测试 + 安全区。

weixin_43199439的博客 2571

从0玩转Mamba神经网络:理论+实战的保姆级教程

Mamba神经网络是一种基于状态空间模型(SSM)的高效序列处理架构,相比Transformer具有更快的推理速度和更低的内存消耗。本文提供从理论到实践的完整指南,详细讲解Mamba的工作原理、与Transformer的差异,并给出基于PyTorch的文本分类实战示例。教程包含环境配置、数据处理、模型搭建、训练评估全流程,展示了Mamba在IMDb情感分析任务中的应用。文章还探讨了Mamba的性能优势及进阶方向,为开发者提供了探索这一新兴技术的实用指南。通过阅读本文,读者可以快速掌握Mamba的核心概念并上

FJN110的博客 316

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

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

辣鸡葫芦娃 1761

QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)

一、环境介绍 QT版本: 5.12.6 编译环境: win10 64位 目标系统: Android 完整工程源码下载地址(包含APK文件):https://download.csdn.net/download/xiaolong1126626497/19051696 二、功能介绍 本软件是一款BLE蓝牙串口调试助手,支持常规的发送和接收调试,BLE是低功耗类型蓝牙,在智能家居、物联网领域使用较多。BLE低功耗蓝牙一般不能直接使用手机进行连接,手机蓝牙默认都是工作在传统蓝牙模式,无法直接连接BL..

7660

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

给n个串,每次询问x号串和y号串的最长公共子串的长度,这个子串必须是n个串中某个串的前缀 做法是把n个串建成AC自动机,前缀树中每个节点都当做结尾节点,val赋为trie树深度 然后把x串丢进自动机里,把匹配到的前缀节点染个色,再把y串丢进去,遇到同样颜色的前缀节点就更新一下答案 #include #include #include #include #include #include #i

Dream in the Night 348

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

2017多校第8场 HDU 6138 Fleet of the Eternal Throne AC自动机或者KMP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6138 题意:给n个串,每次询问x号串和y号串的最长公共子串的长度,这个子串必须是n个串中某个串的前缀 解法1:AC自动机。做法是把n个串建成AC自动机,前缀树中每个节点都当做结尾节点,val赋为trie树深度,然后把x串丢进自动机里,把匹配到的前缀节点染个色,再把y串丢进去,遇到同样颜色...

aishangg437965的博客 130

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

HDU 6138 Fleet of the Eternal Throne [AC自动机]

HDU 6138 Fleet of the Eternal Throne [AC自动机]

ACTerminate的博客 440

HDU 6138 Fleet of the Eternal Throne AC自动机

题目链接:HDU 6138 Fleet of the Eternal Throne  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 862    Accepted Submission(s): 406 Pro

teddywang 375

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): 1035    Accepted Submission(s): 480   Problem Descr...

人生如戏 308

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

http://acm.hdu.edu.cn/showproblem.php?pid=6138 题目大意:给出n个字符串后,会有q个询问,每个询问会输入两个数,记为x,y。然后要求的是,x,y的 最长公共子串,而且这个最长公共子串要是n个字符串中某个字符串的前缀。输出这个串的长度。 解题思路:这题的题意很明确,首先我们要求出x,y串的公共子串,然后要在n个字符串中出现过。这样就可以用的AC自动

Merry_hj的博客 410

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

题意:给出n个字符串,m次查询,每次查询给两个字符串的编号,输出满足是其它字符串的前缀(一个就行)的这两个字符串的最长公共子串的长度。题意是比较简单易懂了。 题解:首先多个字符串又牵涉到匹配找公共子串的问题,就应该考虑AC自动机了,但这道题的问题不只是找最长公共子串,还要求这个子串是其它字符串的前缀。这里可以利用ac自动机fail指针的特点,回忆一下,fail指针是怎么来的,在trie树上查找单...

wookaikaiko的博客 250

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

HDU_6138 Fleet of the Eternal Throne 【AC自动机&&思维】【静态数组】

题目链接 题目描述给定n个字符,m个查询,每个查询包括两个数字,要求从下标为这两个字符串中找到一个最长公共子串,并且这个子串为这n个字符的前缀。解题思路AC自动机模板稍作修改。写这种题目各种绝望,链表写着写着发现不行,然后就创建静态链表,接着又是一阵GG,最后还是数组写的比较好,该题解写完命已呜呼。 步入正题,我们先根据给定的n个字符创建线段树,节点之中保存这该前缀的长度。然后就是常规的建立fai

Learning Deep Learning 480

HDU 6138 Fleet of the Eternal Throne (2017多校8 - AC自动机)

题意: 给你n 个串, q个查询, 每个查询 输出串x 和 串y 的最大公共子串 且这个串 是其他某些串的前缀。 输出长度。 思路: 因为场上读错题, 以为是个极水的后缀数组。= = 其实是ac自动机 我们给n 个串建立ac自动机。 字典树中每个节点维护一个 到根的距离(即是前缀的长度) 然后给串x 跑一遍自动机, 把经过的点的标记出来, 表示 这个点即是 x 的子串, 又是某个串的

aozil_yang的博客 2153
上一篇: ZOJ 3329 One Person Game(概率dp 经典)
下一篇: POJ 2778 DNA Sequence (AC自动机+矩阵快速幂)
Interstellar_
博客等级 码龄10年 8粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值