天梯赛 L1-094 剪切粘贴

原题链接

https://pintia.cn/problem-sets/994805046380707840/exam/problems/1649748772841508869?type=7&page=0


题面

(建议点击原题链接查看,复制过来比较乱,只作预览)

使用计算机进行文本编辑时常见的功能是剪切功能(快捷键:Ctrl + X)。请实现一个简单的具有剪切和粘贴功能的文本编辑工具。

工具需要完成一系列剪切后粘贴的操作,每次操作分为两步:

剪切:给定需操作的起始位置和结束位置,将当前字符串中起始位置到结束位置部分的字符串放入剪贴板中,并删除当前字符串对应位置的内容。例如,当前字符串为 abcdefg,起始位置为 3,结束位置为 5,则剪贴操作后, 剪贴板内容为 cde,操作后字符串变为 abfg。字符串位置从 1 开始编号。
粘贴:给定插入位置的前后字符串,寻找到插入位置,将剪贴板内容插入到位置中,并清除剪贴板内容。例如,对于上面操作后的结果,给定插入位置前为 bf,插入位置后为 g,则插入后变为 abfcdeg。如找不到应该插入的位置,则直接将插入位置设置为字符串最后,仍然完成插入操作。查找字符串时区分大小写。
每次操作后的字符串即为新的当前字符串。在若干次操作后,请给出最后的编辑结果。

输入格式:
输入第一行是一个长度小于等于 200 的字符串 S,表示原始字符串。字符串只包含所有可见 ASCII 字符,不包含回车与空格。

第二行是一个正整数 N (1≤N≤100),表示要进行的操作次数。

接下来的 N 行,每行是两个数字和两个长度不大于 5 的不包含空格的非空字符串,前两个数字表示需要剪切的位置,后两个字符串表示插入位置前和后的字符串,用一个空格隔开。如果有多个可插入的位置,选择最靠近当前操作字符串开头的一个。

剪切的位置保证总是合法的。

输出格式:
输出一行,表示操作后的字符串。

输入样例:
AcrosstheGreatWall,wecanreacheverycornerintheworld
5
10 18 ery cor
32 40 , we
1 6 tW all
14 18 rnerr eache
1 1 e r

输出样例:
he,allcornetrrwecaneacheveryGreatWintheworldAcross



解题思路

设l、r分别是要剪切的位置,s1、s2存的是插入点前后的字符串。
首先使用string的substr成员函数,把s字符串从l-1开始,长度为r-l+1的子串剪下来(第l个字符到第r个字符),临时存放到tmp中。然后使用string类的find成员函数找到s1+s2组成的字符串的起始位置,如果找不到,就放在最后。找到了,就把这个位置左右拆分成两个字符串,把tmp放在中间。详细实现见代码。


代码(CPP)

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
#define endl '\n';
const int maxn = 1e3 + 10;
const int INF = 0x3fffffff;
const int mod = 1e7 + 9;void solve() {string s;cin >> s;int k;cin >> k;while (k--) {int l, r;cin >> l >> r;l--, r--;// 剪切string tmp = s.substr(l, r - l + 1);s.erase(l, r - l + 1);// 粘贴string s1, s2;cin >> s1 >> s2;int index = s.find(s1 + s2);    // 找到粘贴的位置(严格来说index还不是粘贴的位置,index + s1.size() + 1才是)if (index == -1) {s += tmp;       // 如果找不到对应的粘贴位置,那么我们将剪切的内容粘贴到当前字符串最后} else {s = s.substr(0, index + s1.size()) + tmp + s.substr(index + (s1.size()));   // 将剪切的内容插入}}cout << s << endl;
}int main() {freopen("in.txt", "r", stdin);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout << fixed;cout.precision(18);int Case = 1;// cin >> Case;while (Case--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样制作一本旅游电子相册呢?

​随着数码技术的发展&#xff0c;旅游电子相册已成为越来越多旅游爱好者的必备工具。它不仅能让您随时随地欣赏自己的旅行回忆&#xff0c;还能分享给亲朋好友&#xff0c;甚至上传到社交媒体上&#xff0c;让更多人了解您的旅行故事。那么&#xff0c;如何制作一本精美的旅游…

Postman接口测试之断言,全网最细教程没有之一!

一、断言 在 postman 中我们是在Tests标签中编写断言&#xff0c;同时右侧封装了常用的断言&#xff0c;当然 Tests 除了可以作为断言&#xff0c;还可以当做后置处理器来编写一些后置处理代码&#xff0c;经常应用于&#xff1a; 【1】获取当前接口的响应&#xff0c;传递给…

【数据开发】BI数据报表之数据可测试性设计与分析

文章目录 1、什么是BI&数据报表2、什么是可测试性3、数据测试与方法3.1 数据准确性与对比&#xff08;重要&#xff09;3.2 数据安全性 1、什么是BI&数据报表 数据报表是一种数据可视化工具 用于将数据以图表、表格和其他可视化形式呈现出来&#xff0c;以便用户可以…

memcached简介分享

开头语&#xff1a; 大家好&#xff01;欢迎来到本篇博客&#xff0c;今天我们将深入探讨Memcached&#xff0c;这是一个高性能的分布式内存对象缓存系统。Memcached在Web开发中扮演着重要的角色&#xff0c;本文将为您介绍Memcached的基本知识、常见面试问题&#xff0c;并通…

【软件工程】基于领域建模的产品与技术方案设计(领域驱动设计DDD)

文章目录 1、领域建模2、产品方案、技术方案3、领域驱动设计DDD 1、领域建模 领域模型(domain model) 是对领域内的概念类或现实世界中对象的可视化表示。领域模型也成为概念模型、领域对象模型和分析对象模型。域模型是一种概念模型&#xff0c;也叫问题域模型。它表述的是某…

codeforces B - Collecting Game

分析 比 a i a_i ai​ 小的一定对 a n s i ans_i ansi​ 有贡献&#xff08;应该加上&#xff09;。加上之后 s c o r e score score 变大&#xff0c;在 s c o r e score score 变大的过程中可能会有更多的 a j a_j aj​ 小于 s c o r e score score 。很容易想到排序&…

BRC20通证的深度科普:它的潜力与如何导入到bitget

​BRC-20通证是什么&#xff1f; BRC-20通证&#xff1a;比特币上的“变形金刚”&#xff1f;&#xff01;不依赖智能合约&#xff0c;它们就像拥有超能力的外星人&#xff0c;直接在比特币的最小单位——聪上刻写JSON代码。哈哈&#xff0c;这比把房子建在乐高积木上还要刺激…

逆水行舟 不进则退

目录 一、前言 二、2023年度总结 三、2024展望未来 一、前言 这是我从工作以来到现在最喜欢的一句话&#xff0c;我想把这句话送给自己也想送给大家。 2019年7月实习到现在已经过去了四年多&#xff0c;进入2024年也迎来了我工作生涯的第五个年头。 在这个行业里&#xff…

Docker五部曲之四:Docker Compose

文章目录 前言Compose应用程序模型Compose规范顶层属性servicenetworkvolumesconfigssecrets 环境变量.env文件environment属性主机shell中的环境变量 Profiles&#xff08;剖面&#xff09;启动剖面自动启动剖面和依赖项解析 多compose.yml文件共享与扩展构建规范构建属性 部署…

网站后台拿Webshell

通过注入或者其他途径&#xff0c;获取网站管理员账号和密码后&#xff0c;找到后台登录地址&#xff0c;登录后&#xff0c;寻找后台漏洞上传网页后门&#xff0c;获取网站的webshell webshell的作用是方便攻击者&#xff0c;webshel是拥有fso权限&#xff0c;根据fso权限的不…

DXF文件格式:LWPOLYLINE和POLYLINE的数据结构有何不同?

1. LWPOLYLINE和POLYLINE的数据结构有何不同&#xff1f; LWPOLYLINE和POLYLINE的数据结构在DXF文件中略有不同&#xff1a; LWPOLYLINE&#xff08;Lightweight Polyline&#xff09;是一种简化的多段线实体&#xff0c;它使用更少的数据来表示。它的顶点坐标以及与每个顶点…

论文阅读:Bayesian GAN

Bayesian GAN 点击访问paper 官方github 半监督学习对比算法 1.简介 贝叶斯 GAN&#xff08;Saatchi 和 Wilson&#xff0c;2017&#xff09;是生成对抗网络&#xff08;Goodfellow&#xff0c;2014&#xff09;的贝叶斯公式&#xff0c;我们在其中学习生成器参数 θ g \th…

【收藏】专升本文学常识 · 知识汇总篇幅(一)

对于专升本备考有疑问的同学可以和小哎交流哦~提供大家往年经验和分析~ 1&#xff0e;我国儒家学派的创始人是(孔子)。 2&#xff0e;有“亚圣”之称的(孟子)倡导“民为贵&#xff0c;社稷次之&#xff0c;君为轻”的民本思想。 3&#xff0e;《秋水》中对话的两个神话人物是…

mybatisplus(service CRUD 接口)

一、我们在控制器层都是调用Service层&#xff0c;不会直接调用仓储层。现在我给大家介绍一下怎么快速实现Service 的CRUD 定义接口&#xff1a;IProductService 继承IService<实体> package com.saas.plusdemo;import com.baomidou.mybatisplus.extension.service.ISe…

Bootsrap-导航、栅格、及使用案例

文章目录 一、下载并导入Bootstrap中文文档二、Bootstrap初体验三、Boostrap导航栏四、Boostrap栅格五、博客案例六、用户登录界面七、后台管理界面八、引入图标九、Bootstrap动态效果 一、下载并导入Bootstrap中文文档 二、Bootstrap初体验 实现提交按钮&#xff0c;去中文文…

SpringBoot 入门 SpringBoot 与其他项目整合 集成 Druid 数据库连接池 集成 Log 日志 配置修改

目录 1.SpringBoot简介 1.1.什么是SpringBoot 1.2.特点 2.SpringBoot快速入门 2.1.创建SpringBoot项目 2.2.项目目录介绍 2.3.配置修改 2.4.启动SpringBoot 3.SpringBoot与其他项目整合 3.1.整合JDBC 3.2.整合Druid数据库连接池 3.3.整合MyBatis 3.4.整合Log日志 …

排序算法-堆排序(含C语言代码示例)

一、算法介绍 堆排序是一种基于二叉堆数据结构的排序算法。首先&#xff0c;构建最大堆&#xff08;或最小堆&#xff09;&#xff0c;将待排序的数组视作一个完全二叉树&#xff0c;通过从最后一个非叶子节点开始向上调整&#xff0c;使得每个父节点的值都大于等于&#xff08…

科研绘图(四)火山图

火山图是生物信息学中常用的一种图表&#xff0c;用来显示基因表达数据的变化。它通常将每个点表示为一个基因&#xff0c;x轴显示对数比率&#xff08;log ratio&#xff09;&#xff0c;表示基因表达的变化大小&#xff1b;y轴显示-log10(p-value)&#xff0c;表示变化的统计…

跨镜动线分析丨用AI解读顾客行为,助力零售企业运营与增长

步入数字时代&#xff0c;先进技术让传统零售焕发新生。智慧零售以用户为中心&#xff0c;“人”的数据化价值将反哺生产、渠道、销售、运营全场景。 悠络客正式推出“跨镜动线分析”&#xff0c;运用AI技术&#xff0c;深度分析顾客的进店、逛店等一系列行为&#xff0c;助力零…