PASTE
题目描述
我们用文本处理器来处理一个特殊的文本文件,该文本文件共有 N N N 行文本,每一行文本仅包含一个自然数,第一行为 1 1 1、第二行为 2 2 2,以此类推至 N N N 行为自然数 N N N。
假设对该文本文件执行一次“剪切和粘贴”操作含义如下:首先选定连续的若干行文本,“剪切”操作将选定的文本从文件中剪下,而“粘贴”操作将剪切下来的文本插入到文件中的其他地方。
编写一个程序求出在进行了连续若干次“剪切和粘贴”操作后,文本文件中前十行的内容。
输入格式
第一行包含两个用空格隔开的自然数 N N N 和 K K K, N N N 表示文件的总行数 ( 10 ≤ N ≤ 100 , 000 ) (10≤N≤100,000) (10≤N≤100,000), K K K 表示“剪切和粘贴”的总次数 ( 1 ≤ k ≤ 1000 ) (1≤k≤1000) (1≤k≤1000)。
下面 K K K行每一行包含一次“剪切和粘贴”操作的执行信息,每行包含三个用空格隔开自然数 A , B , C A,B,C A,B,C,其中 1 ≤ A ≤ B ≤ N , 0 ≤ C ≤ N − ( B − A + 1 ) 1≤A≤B≤N,0≤C≤N-(B-A+1) 1≤A≤B≤N,0≤C≤N−(B−A+1)。 A A A 和 B B B 表示选定文本的第一行和最后一行, C C C 表示被剪切下来的文本待插入处的前一行,如果 C C C 等于 0 0 0 则被剪切下来的的文本将被插入到文件的开头。
输出格式
由十行组成,其中包含所有的操作都完成后的文本文件中前十行所包含的数字。
样例 #1
样例输入 #1
13 3
6 12 1
2 9 0
10 13 8
样例输出 #1
6
7
8
9
10
11
12
2
3
4
思路
我们这时候用STL库中的vector容器来模拟,用到的方法有:insert
、assign
、earse
、clear
。
代码
//vector容器模拟即可
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>text,paste;
int n,m;
int a,b,c;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
text.push_back(i);
}
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
paste.assign(text.begin()+a-1,text.begin()+b);//把内容放到剪切板上
text.erase(text.begin()+a-1,text.begin()+b);
text.insert(text.begin()+c,paste.begin(),paste.end());//把剪切板内容放到文件中
paste.clear();
}
for(int i=0;i<10;i++){
cout<<text[i]<<endl;
}
return 0;
}