ssoj2453复制&粘贴(字符串)
2015-10-26 13:19
246 查看
【题意】给你一个字符串,s,t,p指将第s到t个字符复制,粘贴到第p位上。经过n次操作,输出前k个字符。
【思路】因为m=10^9,直接做会爆。每一个字符都是由上一个字符串转移来的,因此我们每次记录当前字符在上一个字符串中的位置,逐层递推回去,便得到其在初始字符串中的位置。
【代码】
【思路】因为m=10^9,直接做会爆。每一个字符都是由上一个字符串转移来的,因此我们每次记录当前字符在上一个字符串中的位置,逐层递推回去,便得到其在初始字符串中的位置。
【代码】
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <cmath> using namespace std; const int maxn=200005; int n,m,k,s[maxn],p[maxn],t[maxn]; char str[maxn]; inline int get(){ char c;while(!isdigit(c=getchar())); int v=c-48;while(isdigit(c=getchar()))v=v*10+c-48; return v; } int main(){ k=get();m=get(); cin>>str;n=get(); for(int i=1;i<=n;++i)s[i]=get(),t[i]=get()-1,p[i]=get(); for(int i=0;i<k;++i){ int x=i; for(int j=n;j>=1;--j){ //当前字符位于粘贴字符之前,不用处理 if(x>=p[j] && x<=p[j]+t[j]-s[j])x-=p[j]-s[j]; //当前字符位于粘贴字符中 else if(x>p[j]+t[j]-s[j])x-=t[j]-s[j]+1; //当前字符位于粘贴字符之后 } printf("%c",str[x]); } printf("\n"); return 0; }
相关文章推荐
- java android面试题分析总结《二》
- UIImagePickerController从本地相册加载图片
- 用Java访问带有Kerberos认证的HBase
- 看张子阳如何在30岁前年薪超过30万觉得很有道理几点
- Hibernate提示 Could not parse mapping document from resource...
- redis 学习指南
- 二分法查找(折半查找)
- PHP框架开发第一步——工厂模式
- android布局的问题----有些布局始终置底
- 雕虫小技---如何清空剪切板
- java android面试题分析总结《一》
- NSTimer
- 上海酒店分布数据接口分享
- Android 使用Websocket
- mapreduce运行的5个阶段
- UIPageControl
- Codeforces Round #327 (Div. 2) E. Three States BFS
- Windows五个网络IO模型(服务器用)
- ngix使用
- CPU占用率问题