zoukankan      html  css  js  c++  java
  • 「CodeForces

    BUPT 2017 summer training (for 16) #1I

    题意

    字符串s(1 ≤ |s| ≤ 10 000),有m(1 ≤ m ≤ 300)次操作,每次给l,r,k,代表将r位置插入l位置前,执行k(1 ≤ k ≤ 1 000 000)次。输出最后的s。

    题解

    等价与将字符串的[l...r-k]和[r-k+1...r]两部分调换一下。
    k对r-l取模一下。然后模拟。

    还有种方法是将两部分分别翻转,再整个字符串翻转一下。

    也可以用stl的rotate函数。

    代码

    #include <cstdio>
    char s[10001];
    char t[10001];
    int main(){
    	int m;
    	scanf("%s%d",s+1,&m);
    	while(m--){
    		int l,r,k;
    		scanf("%d%d%d",&l,&r,&k);
    		k%=(r-l+1);
    		for(int i=1;i<=k;++i)
    			t[i]=s[r-k+i];
    		for(int i=0;i<=r-l-k;++i)
    			s[r-i]=s[r-k-i];
    		for(int i=1;i<=k;++i)
    			s[l+i-1]=t[i];
    	}
    	printf("%s",s+1);
    	return 0;
    }
    

    rotate(beg,newBeg,end)
    将区间[beg,end)内的元素进行旋转,执行后*newBeg成为新的第一元素;

    #include <iostream>
    #include <algorithm>
    using namespace std;
    string s;
    int m;
    
    int main(){
    	ios::sync_with_stdio(false);
    	cin>>s>>m;
    	while(m--){
    		int l,r,k;
    		cin>>l>>r>>k;
    		k%=(r-l+1);
    		rotate(s.begin()+l-1,s.begin()+r-k,s.begin()+r);
    	}
    	cout<<s;
    	return 0;
    }
    
    
  • 相关阅读:
    C语言运算符
    C语言的scanf函数
    C语言的数据、常量和变量
    js 操作样式属性
    点击图片显示或隐藏密码案例
    js 操作元素
    DOM 获取元素
    js 字符串对象
    js 数组
    js 倒计时 案例
  • 原文地址:https://www.cnblogs.com/flipped/p/7205178.html
Copyright © 2011-2022 走看看