【Description】
文本编辑器的一个最重要的机能就是复制&粘贴。JOI社现在正在开发一款能够非常高速地进行复制&粘贴的文本编辑器,作为JOI社一名优秀的程序猿,你担负起了复制&粘贴功能的测试这一核心工作。整个JOI社的命运都系在你的身上,因此你无论如何都想写出一个正确且高速的程序来完成这项工作。
具体的做法如下所示。文件的内容是一个字符串S,对其进行N次复制&粘贴的操作,第i次操作复制位置Ai和位置Bi之间的所有文字,然后在位置Ci粘贴。这里位置x表示字符串的第x个字符的后面那个位置(位置0表示字符串的开头),例如字符串”copypaste”的位置6表示字符’a’和字符’s’之间的位置,位置9表示’e’后面的位置(即字符串的结尾)。不过,如果操作后的字符串长度超过了M,那么将超过的部分删除,只保留长度为M的前缀。
你的任务是写一个程序,输出N次操作后字符串的前K个字符。
【Input】
第一行两个空格分隔的正整数K和M,表示最终输出的文字数量和字符串长度的上限。
第二行一个字符串S,表示初始的字符串。
第三行一个整数N,表示操作的次数。
接下来N行,第i行包含三个空格分隔的整数Ai,Bi,Ci,表示第i次操作将位置Ai到Bi之间的字符串复制,然后粘贴到位置Ci。
【Output】
输出一行一个长度为K的字符串,表示最终的字符串的长度为K的前缀
【Sample Input】
2 18
copypaste
4
3 6 8
1 5 2
4 12 1
17 18 0
【Sample Output】
ac
【HINT】
初始的字符串为”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”即为答案。
【Data Constraint】
对于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)

考试的时候暴力30。。。

正解:由于最后k个一定是没有删除过的,所以倒推找前面一次复制粘贴时的位置。若该点在插入位置的前,则说明位置相对于上一次

复制粘贴没有改变。若该点在插入的末位置后面,则说明位置相当于上一次多了一个x到y的长度,则减去即可。若该点就是删改位置的

其中一个,则它要还原成原来复制的位置,即为它到起点的区间长度加上复制的起点x。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 using namespace std;
 5 const int maxn=200005;
 6 int k,m,n,ans[maxn];
 7 int a[maxn],b[maxn],c[maxn];char q[maxn];
 8 int main()
 9 {
10     freopen("A.in","r",stdin);
11     freopen("A.out","w",stdout);
12     scanf("%d%d",&k,&m);
13     scanf("%s",q+1);
14     scanf("%d",&n);
15     for(int i=1;i<=n;i++)
16     scanf("%d%d%d",&a[i],&b[i],&c[i]);
17     for(int i=1;i<=k;i++)ans[i]=i;
18     for(int i=n;i>=1;i--)//询问
19     for(int j=1;j<=k;j++)//有效点
20     {
21         if(ans[j]<=c[i])continue;//不移动
22         if(ans[j]<=c[i]+b[i]-a[i])//属于移动的
23         ans[j]=ans[j]-c[i]+a[i];
24         else ans[j]-=b[i]-a[i];//加在后面,剪掉长度
25     }
26     for(int i=1;i<=k;i++)
27     printf("%c",q[ans[i]]);
28     return 0;
29 }

转载于:https://www.cnblogs.com/937337156Zhang/p/6062357.html

NOIP模拟题——复制粘贴2相关推荐

  1. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  2. NOIp模拟题 之 肮脏的牧师 (桶排序)

    闲话: 考场上看到了这一题,简直令我震惊!啊!居然还有真么简单的模拟题!良心啊! 而且,还是我 痴迷的 熟悉的游戏 --  欧气传说 炉石传说! (话说题面的那三张卡都贼 恶心 好用!都可以在前期打出 ...

  3. 一些noip模拟题一句话题解

    Problem A: 序列 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 12  Solved: 9 [Submit][Status][Web Bo ...

  4. 【noip模拟题】天神下凡(贪心)

    vijos某次模拟赛原题... 处理出每个圆的一级祖先就行了... 其实没有那么麻烦,贪心即可出解. 我们将每个圆转换成线段后按左端点小右端点大的方法排序 然后维护一个栈: 对于每一个圆i 如果栈顶右 ...

  5. NOIP模拟题——来自风平浪静的明天

    [题目描述] 冬眠了五年,光终于从梦中醒来. 千咲.要,大家都在. 隐约记得"昨天"的海船祭,爱花意外成为贡女,沉入海底. 海面冰封,却有丝丝暖流在冰面之下涌动. 此时,爱花沉睡在 ...

  6. Noip模拟题解题报告

    Pro 第一次AK. 题目链接 Sol 站军姿 算是数学题吧,求出两圆的位置关系,然后余弦定理和扇形面积什么的搞搞就行. #include<iostream> #include<cs ...

  7. noip模拟题11.5

    T1 大天使之剑 [问题描述] 小A在游戏⾥打怪.有⼀次,他⼀下⼦遇到了n个怪物. 每个怪物有一个生命值,第i个怪物的生命值是h_i.而小A除了生命值之外,还有一个属性是魔法值m. 小A和怪物们依次行 ...

  8. noip模拟题11.11 光棍节测试

    T1. tractor 题目描述 农场上有N(1 <= N <= 50,000)堆草,放在不同的地点上.FJ有一辆拖拉机,也在农场上.拖拉机和草堆都表示为二维平面上的整数坐标,坐标值在1. ...

  9. [Noip模拟题]寿司

    Description 小 c 是一名 oier.最近,他发现他的数据结构好像学傻了.因为他在刷题时碰到了一道傻逼数据结构题,强行使用了平衡树来解决,卡着时间 AC.为此,他被狠狠地嘲讽了一番.于是, ...

  10. [HZWER NOIP模拟题][杂题][防骗题]数列

    简要题意: 长度为n的数列,有m个询问,每组询问a,b,c,表示要求出最小的i满足a*(i+1)*xi^2+(b+1)*i*xi+c+i=0,为保证强制在线,实际的a=a+lastans(b,c同理) ...

最新文章

  1. 阿里云容器Kubernetes监控(二) - 使用Grafana展现Pod监控数据
  2. shell中uniq与sort -u 两种去重的对别
  3. Android线程详解
  4. Tarjan算法学习1-双连通
  5. 求助:DataGrid加行号的问题
  6. android studio云测,Android studio 下的robotium自动化测试和持续集成
  7. python copy()和deepcopy()解释(import copy)
  8. emlog-FLY主题模板1.4版本免费完全开源
  9. pv,svogi,vxgi,各自的优缺点在哪,ue4还有可能把svogi加进去吗
  10. maven构建Spring项目
  11. iOS中,在类的源文件(.m)中,@interface部分的作用?
  12. 浏览器中cookies查看_如何在任何浏览器中阻止Cookies(除了您使用的网站外)
  13. 2021-08-18
  14. 论文阅读:在Stiefel流形上的黎曼优化
  15. 江苏工匠杯_easyphp_wp
  16. VScode退出全屏
  17. keycloak+gatekeeper(python) 搭建简单流程
  18. Java高级工程师常见面试题
  19. Java中文生僻字排序
  20. 如何改变pycharm的背景颜色

热门文章

  1. 现在学 Prolog 递归
  2. 中华民族(汉族及其他民族)起源
  3. ksz8863调试总线,
  4. hdu2586【How far away ?】
  5. matlab冒号,括号的用法
  6. 神器分享:字母汉字图标ICON生成器
  7. c语言数组作业题,数组练习题
  8. java减号的正则_java 正则匹配 特殊字符 减号- 的情况,处理方式
  9. 每天一kernel:正太概率图
  10. K3S配置IPV6环境