题目名称 2071. 复制&粘贴
输入输出 copypaste.in/out
难度等级 ★★
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 26
题目来源 Gravatarcqw 于2015-10-28加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:21, 提交:50, 通过率:42%
GravatarAsongA 100 1.535 s 6.22 MiB C++
Gravatar胖周zzf 100 2.291 s 3.53 MiB C++
GravatarNVIDIA 100 2.308 s 3.56 MiB C++
Gravatarmikumikumi 100 2.395 s 3.56 MiB C++
Gravatar张灵犀不和我一般见识真可怕呢(笑 100 2.500 s 3.56 MiB C++
GravatarSatoshi 100 2.539 s 3.37 MiB C++
GravatarShirry 100 2.553 s 1.92 MiB C++
GravatarAAAAAAAAAA 100 2.678 s 1.93 MiB C++
GravatarAAAAAAAAAA 100 2.744 s 1.93 MiB C++
GravatarTARDIS 100 2.778 s 3.42 MiB C++
本题关联比赛
20151028a
20151028a
20151028a
关于 复制&粘贴 的近10条评论(全部评论)
为什么这么慢
GravatarAAAAAAAAAA
2017-06-02 20:38 6楼
让我粘一下正解
GravatarNVIDIA
2016-03-13 11:27 5楼
Warning为何关闭流与SCANF的同步,原先的字符串操作就不行了,全部E掉。
GravatarNVIDIA
2016-03-13 11:15 4楼
%%%%% 蒟蒻代码,暴力过部分
GravatarNVIDIA
2016-03-09 07:41 3楼
咋做呢?大牛在哪
GravatarAISS
2015-10-29 10:43 2楼
这真的不是japan的题么。
Gravatarmikumikumi
2015-10-28 17:18 1楼

2071. 复制&粘贴

★★   输入文件:copypaste.in   输出文件:copypaste.out   简单对比
时间限制:1 s   内存限制:256 MiB

【题目描述】


文本编辑器的一个最重要的机能就是复制&粘贴。JOI社现在正在开发一款能够非常高速地进行复制&粘贴的文本编辑器,作为JOI社一名优秀的程序猿,你担负起了复制&粘贴功能的测试这一核心工作。整个JOI社的命运都系在你的身上,因此你无论如何都想写出一个正确且高速的程序来完成这项工作。

具体的做法如下所示。文件的内容是一个字符串S,对其进行N次复制&粘贴的操作,第i次操作复制位置Ai和位置Bi之间的所有文字,然后在位置Ci粘贴。这里位置x表示字符串的第x个字符的后面那个位置(位置0表示字符串的开头),例如字符串”copypaste”的位置6表示字符’a’和字符’s’之间的位置,位置9表示’e’后面的位置(即字符串的结尾)。不过,如果操作后的字符串长度超过了M,那么将超过的部分删除,只保留长度为M的前缀。

你的任务是写一个程序,输出N次操作后字符串的前K个字符。


【输入格式】


第一行两个空格分隔的正整数K和M,表示最终输出的文字数量和字符串长度的上限。

第二行一个字符串S,表示初始的字符串。

第三行一个整数N,表示操作的次数。

接下来N行,第i行包含三个空格分隔的整数Ai,Bi,Ci,表示第i次操作将位置Ai到Bi之间的字符串复制,然后粘贴到位置Ci。


【输出格式】

输出一行一个长度为K的字符串,表示最终的字符串的长度为K的前缀

【样例输入】

2 18
copypaste
4
3 6 8
1 5 2
4 12 1
17 18 0

【样例输出】

ac

【提示】


初始的字符串为”copypaste”。

第一次操作将从位置3到位置6的字符串”ypa”复制,插入位置8,得到字符串”copypastypae”

第二次操作将从位置1到位置5的字符串”opyp”复制,插入位置2,得到字符串”coopyppypastypae”

第三次操作将从位置4到位置12的字符串”yppypast”复制,插入位置1,得到字符串”cyppypastoopyppypastypae”,由于长度超过了M=18,删除超过的部分,得到”cyppypastoopyppypa”

第四次操作将从位置17到位置18的字符串”a”复制,插入位置0,得到字符串”acyppypastoopyppypa”,删除超过18的部分得到”acyppypastoopyppyp”

最后输出长度为2的前缀”ac”即为答案。




对于40%的数据,N,M<=2000

对于100%的数据:

1<=K<=200

1<=M<=10^9

S的每个字符都是小写字母(‘a’~’z’)

K<=|S|<=min(M,2*10^5)

1<=N<=2*10^5

设第i次操作前的字符串长度为Li,那么0<=Ai<Bi<=Li且0<=Ci<=Li (1<=i<=N)


【来源】

在此键入。