Des丨tiny丶柠凉

蓦然回首,前尘不堪流连,自卿离去,暗淡了这俗世繁华,只余孤影几度徘徊,独酌月下,对影成殇;

时间留不住记忆的海,不过是黯然神伤,默默着无奈。


cyclic解题报告

题目描述

给出一个字符串S与N个操作。每个操作用三元组(L, R, K)进行描述:操作将字符串第L个到第R个位置构成的子串循环移动K次。一次循环移动就是将字符串最后的这个字符移动到第一位,其余的字符顺次后移。

例如,对于字符串abacaba,操作(L=3, R=6, K=1)后得到的字符串即为abbacaa。

求出在N个操作后得到的字符串。


输入格式

第一行一个字符串S。

第二行一个整数N,代表操作的总数。

接下来N行每行三个数L,R,K,每行代表一个操作。


输出格式

一行一个字符串,代表N个操作后的字符串。


数据范围与约束

设|S|为字符串S的长度。

对于30%的数据,|S|<=100, N<=100, K<=100

对于100%的数据,|S|<=10000, N<=300, K<=1000,000,1<=L<=R<=|S|


解题思路

很水的一个模拟,可以使用STL。
str = s.substr(r-k,k);将s数组中r-k到k位置上的字符复制到str数组。
s.erase(r-k,k);删除s数组中r-k到k位置上的字符
s.insert(l-1,str);将str数组插入到s数组中的l-1位置。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n,l,r,k;
string s;
int main(){
freopen("cyclic.in","r",stdin);
freopen("cyclic.out","w",stdout);
cin>>s;
int len = s.size();
scanf("%d",&n);
while(n--){
scanf("%d%d%d",&l,&r,&k);
k %= (r-l+1);
string str = s.substr(r-k,k);
s.erase(r-k,k);
s.insert(l-1,str);
}
cout<<s;
return 0;
}

Markdown

最近的文章

book解题报告

问题描述 暑假到了,Rick制定了一个长达M天的阅读计划。他一共有N本书,从1至N进行标号;Rick将它们从上至下摞成一堆。他每天都会读一本书,假设他要读编号为X的书,他会按照以下步骤:1,将这本书上方的所有书搬起来。2,将这本书拿出来3,将搬起来的书挪回去。4,看完后把这本书放到顶端。 每本书都会 …

于  贪心 继续阅读
更早的文章

game解题报告

题目描述 游戏是一个在带权图G上进行的,N个点,M条边,边权c(e),点权w(v),G的点数有偶数个,规则如下;· 魅音和诗音分别将图中的点染色,诗音黑色,魅音蓝色,魅音先手· 一个点只能被染一次· 双方轮流选择点染色,一共选N/2轮,所有点都完成染色经过 N/2 轮游戏之后,两人都得到了一个顶点集 …

于  贪心 继续阅读