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

B3726 [语言月赛202303] String Problem P

[语言月赛202303] String Problem P

题目描述

Farmer John 有 n n n 个字符串,第 i i i 个字符串为 s i s_i si

现在,你需要支持如下 q q q 次操作:

  • 1 x y i:把字符串 s x s_x sx 整体插入到字符串 s y s_y sy 的第 i i i 个字符后,更新 s y s_y sy
  • 2 y:求 s y s_y sy

例如,设 s 1 = abc s_1 = \texttt{abc} s1=abc s 2 = xyz s_2 = \texttt{xyz} s2=xyz,则执行完 1 2 1 2 后(把 s 2 s_2 s2 整体插入到 s 1 s_1 s1 的第 2 2 2 个字符后,更新 s 1 s_1 s1), s 1 = abxyzc s_1 = \texttt{abxyzc} s1=abxyzc s 2 = xyz s_2 = \texttt{xyz} s2=xyz

输入格式

第一行是两个整数,表示字符串数量 n n n 和操作的数量 q q q
接下来 n n n 行,每行一个字符串,第 i i i 行的字符串为 s i s_i si
接下来 q q q 行,每行四个或二个整数,依次表示每次操作。具体格式见『题目描述』。

输出格式

对每次操作 2 2 2,输出一行一个字符串,表示被询问的串。

样例 #1

样例输入 #1

2 2
a
b
1 1 2 1
2 2

样例输出 #1

ba

样例 #2

样例输入 #2

3 6
abc
ijk
xyz
1 2 3 2
1 1 3 5
1 3 1 1
2 1
2 2
2 3

样例输出 #2

axyijkabczbc
ijk
xyijkabcz

提示

数据规模与约定

  • 60 % 60\% 60% 的数据,保证 i = ∣ s y ∣ i = |s_y| i=sy
  • 100 % 100\% 100% 的数据, 1 ≤ n , q ≤ 10 1 \leq n,q \leq 10 1n,q10 1 ≤ ∣ s i ∣ ≤ 10 1 \leq |s_i| \leq 10 1si10 1 ≤ x , y ≤ n 1 \leq x, y \leq n 1x,yn 1 ≤ i ≤ ∣ s y ∣ 1 \leq i \leq |s_y| 1isy

其中 ∣ s y ∣ |s_y| sy 表示进行对应操作时 s y s_y sy 的长度, ∣ s i ∣ |s_i| si 表示输入时字符串的长度。

解析

这是一道关于字符串操作的题目,需要我们实现字符串的插入和查询功能。下面是使用C++语言的解题思路和代码实现:

解题思路:

  1. 使用vector存储给定的n个字符串。
  2. 对于操作1,将字符串sx插入到字符串sy的第i个字符后,可以使用string的insert方法实现。
  3. 对于操作2,直接输出对应下标的字符串即可。

C++代码实现:

#include <iostream>
#include <vector>
#include <string>
using namespace std;int main() {int n, q;cin >> n >> q;vector<string> strings(n);for (int i = 0; i < n; i++) {cin >> strings[i];}while (q--) {int op;cin >> op;if (op == 1) {int x, y, i;cin >> x >> y >> i;x--, y--, i--;strings[y].insert(i, strings[x]);} else if (op == 2) {int y;cin >> y;y--;cout << strings[y] << endl;}}return 0;
}

代码解释:

  1. 首先输入字符串的数量n和操作的数量q。
  2. 创建一个vector类型的变量strings,用于存储给定的n个字符串。
  3. 使用循环输入n个字符串,将它们存储到strings中。
  4. 使用while循环处理q次操作:
    • 如果操作类型为1,则输入x,y,i,并将下标减1(因为题目中的下标从1开始)。使用insert方法将字符串sx插入到字符串sy的第i个字符后。
    • 如果操作类型为2,则输入y,将下标减1,并输出对应下标的字符串。
  5. 程序结束,返回0。

时间复杂度分析:

  • 设字符串的平均长度为L。
  • 对于操作1,插入操作的时间复杂度为O(L),因为插入操作需要移动字符串中的字符。
  • 对于操作2,输出操作的时间复杂度为O(L),因为需要输出整个字符串。
  • 总共有q次操作,因此总的时间复杂度为O(qL)。

空间复杂度分析:

  • 使用vector存储n个字符串,每个字符串的平均长度为L,因此空间复杂度为O(nL)。

这个解法使用了vector和string类型,通过insert方法实现了字符串的插入操作,并直接输出对应下标的字符串来实现查询操作。如果你有任何其他问题或需要进一步的解释,请随时告诉我。

http://www.lryc.cn/news/367563.html

相关文章:

  • htb-linux-3-shocker
  • Elasticsearch - No mapping found for [field_name] in order to sort on
  • Lua 元表(Metatable)深入解析
  • MySQL Show命令集
  • 倩女幽魂搬砖攻略:云手机自动托管搬砖刷本选哪家云手机?
  • php7.3安装phalcon扩展
  • IIoT(智能物联网)的现状、应用及安全
  • YOLOv8_obb的训练、验证、预测及导出[旋转目标检测实践篇]
  • C语言实战:贪吃蛇(万字详解)
  • 定时器更新界面,线程报错
  • 未来AI大模型的发展趋势
  • 【JavaScript函数详解】Day04
  • json和axion结合
  • v1.2.70-FastJson的AutoType机制研究
  • 老旧机子装linux——Xubuntu
  • 关于Redis中事务
  • 【数据分享】《中国文化文物与旅游统计年鉴》2022
  • 设计模式及其在软件开发中的应用
  • LeetCode72编辑距离
  • 竞拍商城系统源码后端PHP+前端UNIAPP
  • 千益畅行,共享旅游卡,灵活同行,畅游无忧的全方位解析
  • Web IDE 在线编辑器综合实践(Web IDE 技术探索 三)
  • Less is more VS 精一 [生活感悟]
  • 函数的概念及图像
  • Linux中Apache网站基于Http服务的访问限制(基于地址/用户)
  • 滚动条详解:跨平台iOS、Android、小程序滚动条隐藏及自定义样式综合指南
  • 06 Linux 设备驱动模型
  • 检测五个数是否一样的算法
  • java 原生http服务器 测试JS前端ajax访问实现跨域传post数据
  • 【机器学习】消息传递神经网络(MPNN)在分子预测领域的医学应用