博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「CodeForces - 598B」Queries on a String
阅读量:6259 次
发布时间:2019-06-22

本文共 934 字,大约阅读时间需要 3 分钟。

题意

字符串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 
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 
#include
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<

转载地址:http://qwnsa.baihongyu.com/

你可能感兴趣的文章
垃圾回收概念与算法
查看>>
JDBC读取MySQL的BLOB类型
查看>>
IconFont 图标svg
查看>>
TFS实现需求工作项自动级联保存
查看>>
crontab定时执行任务
查看>>
LDAP 设置指南(转)
查看>>
软件开发--开发中的辅助工具
查看>>
mysql查询今天、昨天、7天、近30天、本月、上一月 数据
查看>>
单臂路由
查看>>
大数据工程师微职位学习分享
查看>>
企业使用云服务器的优势
查看>>
dubbo Servlet Bridge Server时同时支持hessian和webservice
查看>>
lanmp一键安装包安装说明(包括lamp,lnmp,lnamp安装)
查看>>
Shell命令-文件及内容处理之head、tail
查看>>
Android碎碎念 -- 视频播放器
查看>>
关于51单片机“外部中断触发方式”的经验总结
查看>>
创建 floating IP - 每天5分钟玩转 OpenStack(106)
查看>>
创建个人博客 之 部署WordPress
查看>>
使用FTP批处理备份文件
查看>>
viewpager
查看>>