PASTE(模拟)

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) (10N100,000) K K K 表示“剪切和粘贴”的总次数 ( 1 ≤ k ≤ 1000 ) (1≤k≤1000) (1k1000)

下面 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) 1ABN,0CN(BA+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容器来模拟,用到的方法有:insertassignearseclear

代码

//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;
}
  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

green qwq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值