HDOJ 4300 Clairewd's message(扩展KMP)

java modbus通讯协议_Modbus通 讯 协 议 电磁流量计Modbus通 讯 协 议(版本号:9000-K V9.1.1)2020年01月01日通讯协议针对KFD电磁流量计工业应用设计,版本:9000-K V9.1.1,该版本主要用于实时数据采集、流量测量、流量累计控制及部分参数的修改。一、主机系统通讯部件要求1.国际标准RS-485通讯接口部件,不小于11Bytes 的通信缓冲区(FIFO),支持1200、2400、4800、96... 阅读详情

超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4300


本题题意是给你一个字符对应表,再给一个密文和明文相连接的串(明文后缀可能缺失),求补全后的串。

比如样例:

abcdefghijklmnopqrstuvwxyz
abcdab

为了方便,字符对应表是默认的。abcdab便是密文和明文相连接的串,记长度为m,我们需要找到分割点。

利用扩展KMP将该串所有后缀与该串前缀进行匹配,如果能匹配到最后一个字符,即k+P[k] == m,则该处可进行分割,找到最小的k值,即可进行最小分割。还要注意,k位置必须在串的后一半,即串中密文字符数不能少于明文字符数。匹配的时候前缀部分要根据字符转换表进行转换(即将前缀看成密文,将其转换为明文,再与后缀部分明文进行匹配)。


代码如下:

#include <cstdio>
#include <cstring>

using namespace std;

int P[100010];
char table[26], rev_table[26];
char B[100010];

int ex_preprocess(char* B, int* P, int m = -1)
{
    int a = 0, p, L;

    if (m == -1)
        m = strlen(B);

    P[0] = m;
    while (a < m - 1 && B[a] == table[B[a + 1] - 'a'])
        a++;
    P[1] = a;
    a = 1;

    for (int k = 2; k < m; k++)
    {
        p = a + P[a] - 1;
        L = P[k - a];
        if ((k - 1) + L >= p)
        {
            int j = (p - k + 1) > 0 ? (p - k + 1) : 0;

            while (k + j < m && table[B[k + j] - 'a'] == B[j])
                j++;

            P[k] = j;
            a = k;
        }
        else
            P[k] = L;

        if (k > ((m - 1) >> 1) && k + P[k] == m)
            return k;
    }
    return m;
}

void make_rev_table(char table[26], char rev_table[26])
{
    for (int i = 0; i < 26; i++)
        rev_table[table[i] - 'a'] = 'a' + i;
}

int main()
{
    int t;
    scanf("%d", &t);
    while (t--)
    {
        scanf("%s%s", table, B);

        make_rev_table(table, rev_table);
        int m = strlen(B);
        int index = ex_preprocess(B, P, m);
        for (int i = 0; i < index; i++)
            printf("%c", B[i]);
        for (int i = 0; i < index; i++)
            printf("%c", rev_table[B[i] - 'a']);
        printf("\n");
    }
    return 0;
}


保姆级避坑指南:用Docker在Ubuntu 22.04上部署Isaac Sim 5.1.0,搞定宇树G1仿真环境 本文提供了一份详细的保姆级避坑指南,帮助用户在Ubuntu 22.04上通过Docker部署Isaac Sim 5.1.0,并成功搭建宇树G1仿真环境。文章涵盖了环境准备、Docker与NVIDIA容器工具包的配置、Isaac Sim镜像的定制化拉取与配置,以及宇树G1仿真环境的实战调试,旨在帮助开发者高效解决部署过程中的常见问题。 阅读详情

相关推荐

如何实现MCGS与S7-200SMART PLC以太网多台通信控制?

第九步:(设备工具箱—设备管理—鼠标依次点击通用TCP/IP父设备—西门子_ Smart200到设备窗口里面去)数据类型:第0位(指PLC地址变量小数点后面的位数,例如我地址是M0.0,那么在数据类型应填写通道的第00位)第十步:(鼠标双击打开通用TCPIP父设备0--[通用TCP/IP父设备]进入通信配置)通道地址:0(指小数点前面起始字节的地址,例如我地址是M0.0,那么应在通道地填写0)。第七步:(选择通用TCP/IP父设备,点击新增,右侧选定设备就会自动添加进去。

u010670857的博客 6716

HDOJ4300Clairewd’s message【扩展KMP】

Clairewd’s message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4186    Accepted Submission(s): 1597 Problem Description Clairewd

走一步再走一步 1347

SBM与超效率SBM模型实战:从原始面板数据到MATLAB高效实现

本文详细介绍了SBM模型与超效率SBM模型的核心原理,并提供了从原始面板数据预处理到MATLAB高效实现的完整实战指南。通过具体代码解析,帮助研究者掌握如何利用MATLAB进行数据标准化、模型构建、效率求解及结果可视化,从而精准评估决策单元的相对效率,尤其适用于在高效单元中进一步精细排名的场景。

weixin_29100399的博客 478

扩展KMP算法的详细理解+例题--hdu 2328

借鉴博客:https://blog.youkuaiyun.com/qq_40160605/article/details/80407554 扩展KMP的详细理解 扩展KMP求的是对于原串S1的每一个后缀子串与模式串S2的最长公共前缀。它有一个next[]数组和一个extend[]数组。 next[i]表示为模式串S2中以i为起点的后缀字符串和模式串S2的最长公共前缀长度. 其中,next[0]=l...

weixin_44757834的博客 272

CAN开发笔记(TI开发者推荐笔记)

查阅了很多资料没有查阅到关于5728芯片CAN模块寄存器的介绍,希望通过本文能给做CAN驱动的后来者有一点参考意义,我也是刚接触CAN模块有些不足请各位多多指正。 由下图所示是CAN模块初始化流程图 首先要开始初始化,设置CAN位时间,然后配置message objects, 完成初始化。 1.开始初始化 首先要控制DCAN_CTL 寄存器,该寄存器是CAN模块的总控制器,很多配置通过...

weixin_44316996的博客 3562

Dify + Oracle + MCP:轻松构建 RAG 应用与Oracle MCP Agent

通过一个实践案例,展示如何使用 Oracle 23ai 数据库、Dify、Oracle SQLcl MCP 从零开始构建一个功能完备的 RAG 应用,以及通过 Agent 与 SQLcl MCP Server 实现 Oracle 数据访问。

Rambo zheng的博客 2501

HDOJ 4300 —— 拓展KMP

Clairewd’s message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2780    Accepted Submission(s): 1074 Problem Description Clairew

XMzhou的专栏 879

信贷风控实战指南:Vintage分析表从数据建模到风险洞察

本文是一份信贷风控实战指南,详细阐述了Vintage分析从数据建模到风险洞察的全流程。文章深入解析了Vintage分析作为信贷资产“体检报告”的核心价值,并提供了从借据表与还款计划表设计、账龄计算、逾期口径判定到风险暴露计算与最终可视化透视的完整SQL实现方案,旨在帮助风控从业者构建精准的风险监控体系。

nft7creator的博客 321

KMP HDOJ 4300 Clairewd's message

题目传送门 题意:完全不懂,最后还是看题解才理解了。第一行字符串是密文变成明文的规则,比如第二个样例:“qwertyuiopasdfghjklzxcvbnm”,‘q'对应的明文为’a','w'对应'b'....... 第二行是密文+明文的形式,明文有密文转换来,但不完整,求原来最小的可能文本。 分析:将密文+明文都当做密文转成明文,那么转换后的字符串前缀密文的部分解密,和原来的字符串的后...

weixin_34150830的博客 133

【DeepSeek+Office/WPS】智能办公新时代的全新利器

DeepSeek是一家专注于通用人工智能技术研发的中国科技公司,其核心产品DeepSeek-R1是一款开源的推理大模型,专注于复杂任务的高效处理,支持智能对话、文本生成、语义理解、计算推理、代码生成与补全等多种应用场景。作为国产、免费、开源且强大的AI平台,DeepSeek不仅致力于为终端用户提供高质量的智能服务,还为开发者提供了一整套完善的技术解决方案,帮助他们快速构建和部署自己的智能应用。

2303_77200324的博客 2791

AutoDL跑yolo

由于博主在AutoDL的JupyterLab的终端直接上传ZIp文件要么老是再上传中被中断,要么就是上传后使用unzip指令解压显示“找不到”,作为纯小白的我实在太难了!这个文件列出了一个 Python 项目所需的所有依赖包及其精确的版本号。这个文件是 Python 项目中常见的一种方式,用于确保项目在不同环境中都能以相同的依赖包配置运行。3.进入JupyterLab,在文件夹目录中找到上传的文件夹,右键点击“复制路径”。然后在终端中输入以下指令进行切换到该文件夹路径。9.安装成功后开始输入指令开跑!

m0_73804659的博客 1205

功能测试转Python自动化测试开发:简历翻倍的三大核心能力

软件测试行业正从手工执行向自动化与工程化加速转型,功能测试岗位的简历筛选逻辑也随之改变。理解测试开发的核心能力模型,是突破职业瓶颈的关键。自动化测试的本质是将重复性验证行为转化为可复用的代码资产,而Python凭借其简洁语法与成熟生态(如requests、pytest)成为实现这一转化的首选语言。从基础原理看,测试框架pytest通过fixture、参数化、数据驱动等机制,解决了用例复用、数据隔离和高效维护的问题;UI自动化通过Page Object模式将页面元素与业务断言分层,显著提升脚本稳定性;接口自动

weixin_33831673的博客 315

addBumpConnectTargetConstraint 命令详解

本文介绍了Cadence Innovus中用于倒装芯片设计的addBumpConnectTargetConstraint命令的核心功能和使用方法。该命令主要用于为凸点(Bump)添加连接目标约束,通过绑定实例、引脚/网络和端口号等属性,实现凸点与电源/信号网络的精准映射。文章详细解析了命令语法结构、参数说明及使用场景,包括必选参数(指定凸点方式)、分支选择(实例连接或电源连接类型)以及互斥参数(引脚名与网络名)等重要注意事项,并提供了典型应用示例。该命令特别适用于倒装芯片设计中凸点与PG网络、IO实例的连接

u013620135的博客 394

百度2012年校招笔试题——pszStringRotate

百度2013校园招聘笔试题 算法与程序设计 第4题:          字符串左移,void *pszStringRotate(char *pszString, int nCharsRotate),比如ABCDEFG,移3位变DEFGABC,要求空间复杂度O(1),时间复杂度O(n)。         字符串位移,再简单不过了,方法也很多. 有朴素算法(逐位移动,移动nCharsRotat

Uranux 3073

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

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Project Euler 26 Reciprocal cycles(计算有理小数循环节长度)

超级传送门:http://projecteuler.net/problem=26 算法的核心思想:在除法过程中如果某一状态的除数与被除数和前面某一状态的相等,则后续的除法计算陷入循环,循环节长度就是这两个状态的距离。 例子:计算1/7的循环节长度 状态1: 10/7  得1余3 状态2: 30/7  得4余2 状态3: 20/7  得2余6 状态4: 60/7  得8余4 状

Uranux 1639

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

HDOJ 2852 KiKi's K-Number(树状数组)

超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题意:有一个容器里有m个数(1 分析:用树状数组来维护这个容器,每次查找用二分。 代码: #include #include using namespace std; const int maxn = 100010; int c[maxn]; int n; in

Uranux 1600

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

POJ 2185 Milking Grid(二维KMP)

超级传送门:http://poj.org/problem?id=2185 这道题网上很多其他的blog上的题解都是错的,由于题目自身数据比较水,便都混过去了。其中一种典型的错误解法是求出每一行/列的最小覆盖长度(ABCAB的最小覆盖长度就是3,即对应ABC),然后LCM,若结果大于串长,则取串长。这是一种典型的错误贪心,诸如: 2 8 ABCDEFAB AAAABAAA 这组数据

Uranux 1232

ZOJ 3430 Detect the Virus(AC自动机+解码)

超级传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3430 本题思路清晰,不过解码确实繁琐,看来自己代码能力还有待加强。 需要注意几个点:解码后的ASCII字符的范围是0~255,而且可能包含'\0',不能用char来存,最好用int。 代码: #include #include #

Uranux 1096

Project Euler 51 Prime digit replacements(枚举)

超级传送门:http://projecteuler.net/problem=51   这题我是暴力枚举的,O3优化后2秒多。 先枚举素数,再枚举要替换的位置,我用二进制来表述,设dc为当前枚举到素数的位数,则替换方法可以从1 ~ (1   代码如下:   #include #include #include using namespace std; int p

Uranux 1086

Project Euler 13 Large sum(大数加法)

超级传送门:http://projecteuler.net/problem=13 自己写的大数加法模板,用的时候注意设定tmp数组适当的长度,避免溢出或浪费空间。 #include #include using namespace std; char num[150][51] = { "3710728753390210279879799822083759024651

Uranux 1077

Codeforces Div.2 213 C Matrix (预处理+哈希)

超级传送门:http://codeforces.com/contest/365/problem/C 这场特别遗憾,A题题意看错WA了2次,C题溢出导致没能通过系统测试,如果C题过了就能排前30。 题意是给你一个长度不超过4000的数字s,定义b[i][j]=s[i]*s[j],则可以得到一个矩阵b;又给你一个数a,求b有多少个子矩阵其和为a。 例如: 10 12345 a=10,

Uranux 1036

HDOJ 2054 A == B ?

超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2054 这道题坑特别多: 放几组数据: // 均为YES 0.0 0.00 -0 0 -0. +.0 0.1 00.10 4 4 +1 1 -1 -1.0 1.0 1.0 +.020 00.02 代码如下(主要练习string的iterator): #include #i

Uranux 929

HDOJ 1425 sort

超级传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1425 此题的特点:数据量大,但是数据的范围不大。用hash就行,hash函数就是减500000 #include int hash[1000100]={0}; int main () { int n,m,i,a,count,max,first; while (sc

Uranux 926

Project Euler 54 Poker hands(模拟+hash)

超级传送门:http://projecteuler.net/problem=54   刚看到题目描述,就联想到天津Regional的A题麻将那题,可惜没能AC,遗憾了好久。 这题比麻将那题要简单一些,规则描述比较清楚,要比较两手梭哈牌的大小,我用了hash来存牌,定义了各种判定判断函数来进行判断。 代码量还是比较大的,差不多600行,写的过程中很容易错。Unix/Linux设计思想——小即

Uranux 884

HDOJ 1205 吃糖果

超级传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1205 思路:只要除了数目最多的糖果以外的其他所有糖果的数目之和加1(小心这里要用__int64或long long),大于等于数目最多的糖果数,就能吃完,否则不能。 极限情况是:A*A*A*......*A*A*A (A代表数目最多的糖果,*代表其他糖果),这样无论*是什么,都可以满足题

Uranux 854

Codeforces Div.2 212 C Insertion Sort (DP)

超级传送门:http://codeforces.com/contest/362/problem/C 这是一道以插入排序(Insertion Sort)为基础的动态规划题目,不熟悉插入排序请参考维基百科插入排序 题目中给的插入排序代码如下所示: for (int i = 1; i < n; i = i + 1) { int j = i; while (j > 0 && a

Uranux 836
上一篇: POJ 1226 Substrings(KMP+枚举)
下一篇: HDOJ 4333 Revolving Digits(KMP+扩展KMP)
Uranux
博客等级 码龄15年 16粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值