您的位置:首页 > 其它

ssoj2453复制&粘贴(字符串)

2015-10-26 13:19 246 查看
【题意】给你一个字符串,s,t,p指将第s到t个字符复制,粘贴到第p位上。经过n次操作,输出前k个字符。

【思路】因为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: