Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >「CodeForces - 598B」Queries on a String

「CodeForces - 598B」Queries on a String

作者头像
饶文津
发布于 2020-06-02 07:52:46
发布于 2020-06-02 07:52:46
33300
代码可运行
举报
文章被收录于专栏:饶文津的专栏饶文津的专栏
运行总次数:0
代码可运行

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函数。

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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成为新的第一元素;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Educational Codeforces Round 82 (Rated for Div. 2)
思路:我的思路是记录每个1出现的位置,然后在进行遍历得到每相邻的1之间的距离。然后都加起来输出就行了
杨鹏伟
2020/09/11
2420
Codeforces 7D. Palindrome Degree
题目链接 乍一看以为是pam 后来发现pam写不了233 不然要写三种的 只要根据dp[i]=dp[i/2]+1;来推就行了 思路还是比较清晰的qwq
wenzhuan
2022/08/15
1730
codeforces 628B(数学)
Max wants to buy a new skateboard. He has calculated the amount of money that is needed to buy a new skateboard. He left a calculator on the floor and went to ask some money from his parents. Meanwhile his little brother Yusuf came and started to press the keys randomly. Unfortunately Max has forgotten the number which he had calculated. The only thing he knows is that the number is divisible by 4.
dejavu1zz
2020/10/23
3940
Code Forces 22B Bargaining Table
B. Bargaining Table time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Bob wants to put a new bargaining table in his office. To do so he measured the office room thoroughly and drew i
ShenduCC
2018/04/26
6310
SDUT 2019 级程序设计基础(B)II 实验5–贪心
一开始没考虑全面,认为每次直接贪掉所有数字里面最大的就行,但是如10230450删两个就变成了102300其实最小是删1和3变成200。
Here_SDUT
2022/06/29
2630
AtCoder Beginner Contest 174 A ~ E
我看有人用指针来做的,其实道理是一样的,就是字符串中所有的R都在左边,然后所有的W都在右边就行了。
杨鹏伟
2020/09/10
3450
【AtCoder - 2300】Snuke Line(树状数组)
每隔d站停一次的列车,一定能买到购买区间的长度≥d的纪念品。 长度比d小但包含了d的倍数的纪念品也可以买到。 所以,如果按长度给纪念品排序,用树状数组维护长度小于当前d的购买区间,那么就可以很快求出每个停靠点(d的倍数)有多少个长度不超过d的纪念品了。
饶文津
2020/06/02
3830
【AtCoder - 2300】Snuke Line(树状数组)
Codeforces 1326D2. Prefix-Suffix Palindrome (Hard version)
题目链接 manacher hash pam都能搞 upd:kmp也行 思路还是比较清晰的 先把原串分为三部分:前缀 后缀 中间 比如acbba 分成a+cbb+a 然后对中间这个部分找最长的以0开头或者以len-1结尾的回文串 答案就是前缀+最长回文串+后缀
wenzhuan
2022/08/15
3020
2020 Multi-University Training Contest 8
给定长度为 n 的数组 a ,对于任意 i 都有 -1\leq a_i\leq 1 。想要将 a 划分做若干块使得每块总和的 sgn 和最大,每块的长度需要满足 l\leq len\leq r 。
wenzhuan
2022/08/15
2410
Codeforces Round #598解题报告
先反思一下 B这个傻逼暴力场上没调出来 真的弟弟 这场+11 我什么时候上蓝啊555 贪心场√
wenzhuan
2022/08/15
2330
codeforces 224B(思维+双指针)
由于区间内有k个不同的数,所以r-l+1至少为k。所以可以找到第一个r,然后再从r开始向左找l,找到的区间l和r即为答案
dejavu1zz
2020/10/23
4160
Codeforces Round #179 (Div. 2)A、B、C、D
n个元素的数组,每个元素不超过1000,可以交换相邻两个元素,问是否可以在有限次的操作之后使得相邻两个元素的值不相同。
xindoo
2021/01/22
2610
Light oj 1082 - Array Queries(区间最小值)
ST算法:先是预处理部分(构造RMQ数组),DP处理。假设b是所求区间最值的数列,dp[i][j] 表示从i到i+2^j -1中最值(从i开始持续2^j个数)。即dp[i][j]=min{dp[i][j-1],dp[i+2^(j-1)][j-1]},或者dp[i][j]=max{dp[i][j-1],dp[i+2^(j-1)][j-1]},这个过程的复杂度为:O(n(longn))
xindoo
2021/01/22
4180
ICPC Pacific Northwest Regional Contest 2019 C D E M 题解
D 标准签到,因为只能加跟除,所以 A =< B 时就只能执行加法操作 然后 A > B 时,只能对A 不是偶数变偶数然后除 就这样子一直到 A < B。然后执行加法操作。
杨鹏伟
2020/09/10
4090
YbtOJ 544「后缀自动机」子串选取
你可以从左到右依次 选出 若干个 无交 子串 t_1,t_2,\cdots,t_m,要求每次选出的字符串 t_i 必须是前一个字符串 t_{i-1} 的 真子串(即 t_i 是 t_{i-1} 的子串且 t_i 的长度比 t_{i-1} 小)。
yzxoi
2022/09/19
2930
补题A-D Codeforces Round 961 (Div. 2)
枚举每个可能T与每个S是否有交集,时间复杂度是 2^c\cdot n ,时间复杂度会爆炸。
WuShF
2025/03/08
830
补题A-D Codeforces Round 961 (Div. 2)
Codeforces 660C-Hard Process【尺取法练习】
C. Hard Process time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given an array a with n elements. Each element of a is either 0 or 1.
杨鹏伟
2020/09/11
4840
尺取法
尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以说尺取法是一种高效的枚举区间的方法,是一种技巧,一般用于求取有一定限制的区间个数或最短的区间等等。当然任何技巧都存在其不足的地方,有些情况下尺取法不可行,无法得出正确答案,所以要先判断是否可以使用尺取法再进行计算。
AngelNH
2020/04/16
4790
【C/C++】速通涉及string类的经典OJ编程题
六点半就起.
2024/10/16
920
【C/C++】速通涉及string类的经典OJ编程题
SDUT 2021 Winter Individual Contest – G
一辆车连司机可以坐5人,告诉你每个人开车从A到B或者从B到A花费的时间,一共有k辆车,问你让所有人从A到B花费的最少时间。车最终可以留在A地也可以留在B地,回程司机不能带人。
Here_SDUT
2022/08/08
3320
相关推荐
Educational Codeforces Round 82 (Rated for Div. 2)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验