当前位置: 首页 > news >正文

CF1200E Compress Words

题目描述

Amugae has a sentence consisting of n words. He want to compress this sentence into one word. Amugae doesn't like repetitions, so when he merges two words into one word, he removes the longest prefix of the second word that coincides with a suffix of the first word. For example, he merges "sample" and "please" into "samplease".

Amugae will merge his sentence left to right (i.e. first merge the first two words, then merge the result with the third word and so on). Write a program that prints the compressed word after the merging process ends.

输入格式

The first line contains an integer n ( 1≤n≤10^5 ), the number of the words in Amugae's sentence.

The second line contains n words separated by single space. Each words is non-empty and consists of uppercase and lowercase English letters and digits ('A', 'B', ..., 'Z', 'a', 'b', ..., 'z', '0', '1', ..., '9'). The total length of the words does not exceed 10^6 .

输出格式

In the only line output the compressed word after the merging process ends as described in the problem.

题意翻译

Amugae 有 n 个单词,他想把这个 n 个单词变成一个句子,具体来说就是从左到右依次把两个单词合并成一个单词。合并两个单词的时候,要找到最大的 i(i≥0),满足第一个单词的长度为 i 的后缀和第二个单词长度为 i 的前缀相等,然后把第二个单词第 i 位以后的部分接到第一个单词后面。输出最后那个单词。

注:题中的字符串存在大小写字母和数字。

输入输出样例

输入 #1

5
I want to order pizza

输出 #1

Iwantorderpizza

输入 #2

5
sample please ease in out

输出 #2

sampleaseinout

本题的解法有两种,一种是KMP算法,另一种是哈希算法,我使用的是哈希算法来求解

思路

本题有两个哈希值一个是主串的,一个是子串的,通过对比主串后缀的哈希值和子串前缀的哈希值来判断需要链接的部分,然后进行连接。

1.本题的坑点:题目的意思是合并单词前面的主串的后缀和此单词的前缀而不是前一个单词的后缀和后一个单词的前缀,举个例子:

给你3个单词:i,ab,iab,合并之后答案是iab,而不是iabiab。

2.采用哈希解法本题的难点:

1.本题需要采用字符串进制哈希且是双哈希,不然65数据过不了,所谓双哈希就是同时满足两个哈希函数,两个哈希函数有不同的key值和mod值。

2.对于主串求后缀的哈希值需要用O(1)速度,而不是暴力,否则时间过不了,

O(1)求字符串子串方法:

假设有一个 S=s1s2s3s4s5的字符串,根据定义,获取其 Hash值如下(我们先忽略MOD,方便理解):

haxi[1]=s1

haxi[2]=s1∗Base+s2

haxi[3]=s1∗Base^2+s2∗Base+s3

haxi[4]=s1∗Base^3+s2∗Base^2+s3∗Base+s4

现在我们想求字串 s3s4的hash值,不难得出为s3∗Base+s4,并且从上面观察,如果看hash[4]−hash[2]*Base^2,至此,通过对上例的归纳,可以得出如下的公式。

ans=((hash[r]−hash[l−1]∗Base^r−l+1)%MOD+MOD)%MOD,(求区间(l,r)字串的哈希值

思路和坑点讲完,上代码

//Compress Words  CF1200E(双字符串哈希+后缀字符串哈希)
#include<stdio.h>
#include<string.h>
long long  mod = 1e8+4,mod2= 1e9+9;
int base = 131, hgf = 377;
char s[1000001], t[1000001];
long long ans[1000001], bns[1000001];//主串的两个哈希数组(双哈希)
long long hj[1000001], hg[1000001];//预处理进制数组
int main()
{int n, k, h, i, j, q;long long f, u;hg[0] = hj[0] = 1;for (i = 1; i <= 1000000; i++)//预处理进制数组{hj[i] = (hj[i - 1] * base) % mod;hg[i] = (hg[i - 1] * hgf) % mod2;}scanf("%d", &n);scanf("%s", t);//先输入第一个串h = strlen(t);for (i = 0; i < h; i++)//求哈希值{ans[i + 1] = (ans[i] * base + t[i]) % mod;bns[i + 1] = (bns[i] * hgf + t[i]) % mod2;}for (i = 2; i <= n; i++){scanf("%s", s);//输入单词k = strlen(s);int ww = 0, flag = 0;//ww记录最大重合的单词数量,flag判断是否有重合long long gf = 0, kg = 0;for (j = 0; j < h && j < k; j++)//从单词的第一个字符开始比较{//输入单词的两个哈希值gf = (gf * base + s[j]) % mod;kg = (kg * hgf + s[j]) % mod2;//主串对应后缀的两个哈希值(O(1)求法,非暴力)f = (gf + ans[h - j - 1] * hj[j + 1]) % mod;u = (kg + bns[h - j - 1] * hg[j + 1]) % mod2;if (f == ans[h] && u == bns[h])//两两对应都相同则存在重合{ww = j; flag = 1;}}if (flag == 1)//如果有重合部分ww++;for (j = ww; j < k; j++)//重合部分后面的连接到主串后面并计算哈希值{t[h++] = s[j];ans[h] = (ans[h - 1] * base + s[j]) % mod;bns[h] = (bns[h - 1] * hgf + s[j]) % mod2;}t[h] = '\0';}printf("%s", t);//输出答案return 0;
}

本题写了3~4个小时,看了题解,虽说花费的时间多,但更进一步了解了进制哈希,双哈希和O(1)方式求子串哈希的方法,还是有收获的

相关文章:

CF1200E Compress Words

题目描述 Amugae has a sentence consisting of n words. He want to compress this sentence into one word. Amugae doesnt like repetitions, so when he merges two words into one word, he removes the longest prefix of the second word that coincides with a suffix…...

ip https证书推荐

公网IP地址是每个连接到互联网的设备所必需的标识。公网IP地址是用于在互联网上唯一标识一个设备的IP地址&#xff0c;它由一组由四个数字组成的字符串组成&#xff0c;每个数字在0到255之间。随着互联网的发展&#xff0c;只有公网IP地址的站点也开始重视传输信息安全&#xf…...

大气颗粒物与VOCs PMF源解析技术应用

目前&#xff0c;大气颗粒物和臭氧污染成为我国亟待解决的环境问题。颗粒物和臭氧污染不仅对气候和环境有重要影响&#xff0c;而且对人体健康有严重损害。而臭氧的前体物之一为挥发性有机物&#xff08;VOCs&#xff09;。为了高效、精准地治理区域大气颗粒物和臭氧污染&#…...

VSCODE中使用Vue3教程

VUE介绍 Vue.js is a popular JavaScript library for building web application user interfaces and Visual Studio Code has built-in support for the Vue.js building blocks of HTML, CSS, and JavaScript. For a richer Vue.js development environment, you can insta…...

Mac M2芯片配置PHP环境

Mac M2芯片配置PHP环境 1. XAMPP2. PHPBrew(PHP版本管理)安装php7.4.33版本 3. 直接使用homebrew 安装php环境参考 1. XAMPP 官网地址 https://www.apachefriends.org/ 安装 安装完成 web server打开后&#xff0c;在打开localhost 成功&#xff01; 2. PHPBrew(PHP版本管…...

[嵌入式系统-25]:RT-Thread -12- 内核组件编程接口 - 网络组件 - HTTP编程

目录 一、HTTP编程概述 1.1 概述 1.2 HTTP 服务器和 HTTP 客户端 二、HTTP Client 2.1 如何配置HTTP Client 2.2 HTTP Client代码实例1&#xff1a;socket发送http报文 2.3 HTTP Client代码实例2&#xff1a;httpc_xx接口收发HTTP报文 2.3.1 接口函数描述 2.3.2 代码实…...

一个服务器实现本机服务互联网化

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 一个服务器实现本机服务互联网化 前言痛点关于中微子代理实战演练搭建服务端搭建客户端服务端配置代理实现 前言 在数字世界的网络战场上&#xff0c;中微子代理就像是一支潜伏在黑暗中的数字特工队&…...

django配置视图并与模版进行数据交互

目录 安装django 创建一个django项目 项目结构 创建视图层views.py 写入视图函数 创建对应视图的路由 创建模版层 配置项目中的模版路径 创建模版html文件 启动项目 浏览器访问结果 安装django pip install django 创建一个django项目 这里最好用命令行完成&#xf…...

Java进阶

乐观锁和悲观锁分布式锁hashmap原理Redis及其分布式DDD领域驱动设计IO、多线程 ??Kafka ??设计模式之&#xff1f;&#xff1f;Elasticsearch ??JVM ?? 面试题汇总1...

⭐北邮复试刷题106. 从中序与后序遍历序列构造二叉树__递归分治 (力扣每日一题)

106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], postor…...

K8S更新部署docker的两种方法举例

前提条件 imagePullPolicy: Always 方法1&#xff1a;删除更新法 test-project为命名空间 --删除所有asp-svc下面的pod,这会导致从新拉取镜像 kubectl delete pods -l appasp-svc -n test-project --删除指定的pod&#xff0c;这会导致从新拉取镜像 kubectl delete pod …...

Java高并发编程基础之Thread构造函数大有内涵

引言 在Java中&#xff0c;Thread类提供了许多丰富的构造函数&#xff0c;以便于创建和管理线程。使得可以根据具体需求来创建和配置线程对象&#xff0c;从而实现更灵活、可扩展的多线程编程。 Thread类的无参构造函数可以创建一个新的线程对象&#xff0c;然后通过调用star…...

2023年12月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 运行以下程序,输出的结果是?( ) class A():def __init__(self,x):self.x=x...

代码随想录算法训练营第一天

● 今日学习的文章链接和视频链接 ● 自己看到题目的第一想法 1. 704二分法&#xff1a; 方法一&#xff1a; 整个数组是 左闭右闭区间 [ ] left指针指向数组开始下标&#xff0c; right 指针指向数组最后下表nums.size()-1, mid为 (leftright) /2循环条件 left<rightnu…...

基于 java springboot+layui仓库管理系统

基于 java springbootlayui仓库管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…...

电商平台商家结算

本文主要分析了目前电商清结算的流程以及自己对电商清结算的看法。 基本概念 先说下电商平台清结算的概念。简单说就是收的用户&#xff08;C端&#xff09;的付款&#xff0c;经过清分&#xff0c;再结算给对应商家。当然&#xff0c;这里排除那种资金不通过第三方&#xff0c…...

AIGC 实战:如何使用 Docker 在 Ollama 上离线运行大模型(LLM)

Ollama简介 Ollama 是一个开源平台&#xff0c;用于管理和运行各种大型语言模型 (LLM)&#xff0c;例如 Llama 2、Mistral 和 Tinyllama。它提供命令行界面 (CLI) 用于安装、模型管理和交互。您可以使用 Ollama 根据您的需求下载、加载和运行不同的 LLM 模型。 Docker简介 D…...

MII、RMII、GMII和RGMII,以太网接口中常见的几种标准接口

MII、RMII、GMII和RGMII是以太网接口中常见的几种标准接口&#xff0c;它们在硬件设计中有各自的特点和注意事项。 MII&#xff08;Media Independent Interface&#xff09;&#xff1a;MII是一种传统的以太网物理层接口标准&#xff0c;它包括4位数据总线、时钟和控制信号。…...

SpringCloudConfig+SpringCloudBus+Actuator+Git实现Eureka关键配置属性热更新(全程不重启服务)

文章目录 前言1.痛点2.解决方案3.具体实现3.1搭建热配置服务3.2编写配置文件3.3搭建版本控制仓库3.4Eureka-Client引入以下依赖3.5Eureka-Client微服务编写以下配置bootstrap.yml提前加载3.6分别编写测试Controller3.7测试效果3.8下线场景压测 4.SpringCloudBus优化5.写到最后 …...

郑州大学2024年寒假训练 Day7:数论

感觉这一块讲的有点太少了&#xff0c;只有辗转相除法&#xff0c;拓展欧几里得定理&#xff0c;素数筛&#xff0c;快速幂和逆元五个内容。数论的内容远远不止这些。不过一个视频也讲不了太多东西&#xff0c;讲的还是数学&#xff0c;也是没有办法。一边看题一边说吧。 辗转…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...