NOIP模拟题——复制粘贴2
【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相关推荐
- 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26
背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...
- NOIp模拟题 之 肮脏的牧师 (桶排序)
闲话: 考场上看到了这一题,简直令我震惊!啊!居然还有真么简单的模拟题!良心啊! 而且,还是我 痴迷的 熟悉的游戏 -- 欧气传说 炉石传说! (话说题面的那三张卡都贼 恶心 好用!都可以在前期打出 ...
- 一些noip模拟题一句话题解
Problem A: 序列 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 12 Solved: 9 [Submit][Status][Web Bo ...
- 【noip模拟题】天神下凡(贪心)
vijos某次模拟赛原题... 处理出每个圆的一级祖先就行了... 其实没有那么麻烦,贪心即可出解. 我们将每个圆转换成线段后按左端点小右端点大的方法排序 然后维护一个栈: 对于每一个圆i 如果栈顶右 ...
- NOIP模拟题——来自风平浪静的明天
[题目描述] 冬眠了五年,光终于从梦中醒来. 千咲.要,大家都在. 隐约记得"昨天"的海船祭,爱花意外成为贡女,沉入海底. 海面冰封,却有丝丝暖流在冰面之下涌动. 此时,爱花沉睡在 ...
- Noip模拟题解题报告
Pro 第一次AK. 题目链接 Sol 站军姿 算是数学题吧,求出两圆的位置关系,然后余弦定理和扇形面积什么的搞搞就行. #include<iostream> #include<cs ...
- noip模拟题11.5
T1 大天使之剑 [问题描述] 小A在游戏⾥打怪.有⼀次,他⼀下⼦遇到了n个怪物. 每个怪物有一个生命值,第i个怪物的生命值是h_i.而小A除了生命值之外,还有一个属性是魔法值m. 小A和怪物们依次行 ...
- noip模拟题11.11 光棍节测试
T1. tractor 题目描述 农场上有N(1 <= N <= 50,000)堆草,放在不同的地点上.FJ有一辆拖拉机,也在农场上.拖拉机和草堆都表示为二维平面上的整数坐标,坐标值在1. ...
- [Noip模拟题]寿司
Description 小 c 是一名 oier.最近,他发现他的数据结构好像学傻了.因为他在刷题时碰到了一道傻逼数据结构题,强行使用了平衡树来解决,卡着时间 AC.为此,他被狠狠地嘲讽了一番.于是, ...
- [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同理) ...
最新文章
- 阿里云容器Kubernetes监控(二) - 使用Grafana展现Pod监控数据
- shell中uniq与sort -u 两种去重的对别
- Android线程详解
- Tarjan算法学习1-双连通
- 求助:DataGrid加行号的问题
- android studio云测,Android studio 下的robotium自动化测试和持续集成
- python copy()和deepcopy()解释(import copy)
- emlog-FLY主题模板1.4版本免费完全开源
- pv,svogi,vxgi,各自的优缺点在哪,ue4还有可能把svogi加进去吗
- maven构建Spring项目
- iOS中,在类的源文件(.m)中,@interface部分的作用?
- 浏览器中cookies查看_如何在任何浏览器中阻止Cookies(除了您使用的网站外)
- 2021-08-18
- 论文阅读:在Stiefel流形上的黎曼优化
- 江苏工匠杯_easyphp_wp
- VScode退出全屏
- keycloak+gatekeeper(python) 搭建简单流程
- Java高级工程师常见面试题
- Java中文生僻字排序
- 如何改变pycharm的背景颜色