ssoj2453复制&粘贴(字符串)

【题意】给你一个字符串,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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值