问题描述
给出一个字符串S与N个操作。每个操作用三元组(L, R, K)进行描述:操作将字符串第L个到第R个位置构成的子串循环移动K次。一次循环移动就是将字符串最后的这个字符移动到第一位,其余的字符顺次后移。
例如,对于字符串abacaba,操作(L=3, R=6, K=1)后得到的字符串即为abbacaa。
求出在N个操作后得到的字符串。

输入格式(cyclic.in)
第一行一个字符串S。
第二行一个整数N,代表操作的总数。
接下来N行每行三个数L,R,K,每行代表一个操作。

输出格式(cyclic.out)
一行一个字符串,代表N个操作后的字符串。

样例输入
abbacaa
2
3 6 1
1 4 2

样例输出
ababaca

数据范围与约束
设|S|为字符串S的长度。
对于30%的数据,|S|<=100, N<=100, K<=100
对于100%的数据,|S|<=10000, N<=300, K<=1000,000,1<=L<=R<=|S|

这个题一开始我看到数据范围想到了链表,调了好长时间才调过去ToT,后来才发现复杂度原来不是O(n*s),而是直接模拟的O(3*n*s)!更糟糕的是,人家直接模拟的比我好不容易调出来的链表快啊!ToT
先贴一下链表的代码:

#include<iostream>//链表(代码好恶心)
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstdio>
#include<string>
using namespace std;
char s[10009];
struct H{int f,t;
}b[10009];
int len,n;
int main()
{freopen("cyclic.in","r",stdin);freopen("cyclic.out","w",stdout);gets(s+1);len=strlen(s+1);scanf("%d",&n);for(int i=1;i<=len;i++){b[i].f=i-1;b[i].t=i+1;}for(int i=1;i<=n;i++){int l,r,k;scanf("%d%d%d",&l,&r,&k);k=k%(r-l+1);int x;if(k){for(x=1;b[x].f;x++);int l1,r1,k1,k2;for(int j=1;j<=r;j++){if(j==l) l1=x;if(j==r) r1=x;if(j==r-k) k1=x;if(j==r-k+1) k2=x;x=b[x].t;}//注意细节:-( b[b[r1].t].f=k1;b[k2].f=b[l1].f;b[b[l1].f].t=k2;b[k1].t=b[r1].t;b[r1].t=l1;b[l1].f=r1;}}int x;for(x=1;b[x].f;x++);printf("%c",s[x]);for(int i=1;i<=len-1;i++){printf("%c",s[b[x].t]);x=b[x].t;}return 0;
}

直接模拟:

#include<iostream>//直接模拟O(3*n*s) ,正好八次方嘛!
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
char s[10009],b[10009];
int n;
int main()
{freopen("cyclic.in","r",stdin);freopen("cyclic.out","w",stdout);cin>>s+1;scanf("%d",&n);for(int i=1;i<=n;i++){int l,r,k;scanf("%d%d%d",&l,&r,&k);k%=(r-l+1);int t=0;for(int j=l;j<=(r-k);j++){b[++t]=s[j];}int p=r-k;for(int j=l;j<=(l+k);j++){s[j]=s[++p];}for(int j=1;j<=t;j++){s[l+k+j-1]=b[j];}}cout<<s+1;return 0;
}

转载于:https://www.cnblogs.com/dfsac/p/7587879.html

循环移动(cyclic)相关推荐

  1. 用计算机模拟人类循环,半模拟循环计算,cyclic computation with semi-simulation,音标,读音,翻译,英文例句,英语词典...

    补充资料:材料设计中的计算机模拟 材料设计中的计算机模拟 computer simulation for materials design 材料设计中的计算机模拟computer siinulatio ...

  2. OFDM中保护间隔与循环前缀抵抗ISI…

    主要参考文档:OFDM移动通信技术原理与应用 目录 一.符号间干扰ISI 与 信道间干扰ICI 的概念 二.保护间隔 减少 ISI 三.循环前缀 减少 ICI 四.保护间隔与循环前缀 加入后的OFDM ...

  3. 软件测试循环测试原理,电化学测试(三):循环伏安法详解

    循环伏安法是一种很有用的电化学研究方法,可用于电极反应的性质.机理和电极过程动力学参数的研究.对于一个新的电化学体系,首选的研究方法往往是循环伏安法.由于受影响因素较多,该法一般用于定性分析,很少用于 ...

  4. LTE CRS 时频资源

    1. 参考 Spec 3GPP-36.211-6.10 Cell-specificReference Signal (CRS) Cell-specificreference signals are t ...

  5. arduino 呼吸灯_如何改善您的Arduino呼吸机:用于临时COVID-19呼吸机设计的RTS和SCS简介...

    arduino 呼吸灯 The world as we know it was recently taken by storm. That storm was the outbreak of the ...

  6. python时间序列指数平滑预测_时间序列分析预测实战之指数平滑法

    一.什么是时间序列分析? 在工作中,常常要对数据进行预测,确定业务未来的发展趋势,进而配置相关的营销策略.制定业务目标,由此引申出了一个重要的用数据预测未来的方法--时间序列分析,今天和大家分享就是实 ...

  7. 机器学习笔记(时间序列):不同类型的图示

    1 时间图 time-plot 就是最普通的绘制一张随时间变化的连点图.不过在这一张图中,可能会有时间序列的不同属性:趋势.季节性.周期性 1.0 R语言补充:设置时间序列 y <- ts(c( ...

  8. 常见.Net 英文专业词汇收集

    转自:http://www.ninedns.com/asp.net/2007102514949.html abstract class    抽象类 accelerator    快捷键 accele ...

  9. 浅谈JavaScript、ES5、ES6

    什么是JavaScript JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能.(好吧,概念什么最讨厌了) 动态: 在运行时确定数据类型.变量使用之前不 ...

  10. HBase数据备份及恢复(导入导出)的常用方法

    一.说明 随着HBase在重要的商业系统中应用的大量增加,许多企业需要通过对它们的HBase集群建立健壮的备份和故障恢复机制来保证它们的企业(数据)资产.备份Hbase时的难点是其待备份的数据集可能非 ...

最新文章

  1. 【PHP】curl_init() 如何排错????
  2. 硅谷增长的新指标——超级用户微笑曲线
  3. VC小技巧汇总之对话框技巧
  4. Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】
  5. HarmonyOS之AI能力·分词
  6. 【Linux】一步一步学Linux——lsattr命令(116)
  7. 天津市电子计算机职业学院,天津市电子计算机职业中等专业学校
  8. 设置div的高度_html中如何让div居中
  9. 详解3种常用数据分析方法,满足你职场95%的高频需求
  10. Swift---TextView用法
  11. 转 疯狂代码 大型网站架构系列(未完待续)
  12. 高等代数100道题及答案解析
  13. EMNLP-21-Exploring Task Difficulty for Few-Shot Relation Extraction
  14. 四足机器人--嵌入式硬件设计
  15. sn0int - 半自动化 OSINT 框架和包管理器
  16. 牛客寒假算法基础训练营3 G.糖果
  17. MySQL操作数据库语法及常见MySQL面试题与答案
  18. MATLAB--数值计算(矩阵)
  19. java浅显易懂解释return相关
  20. To My Little Princess

热门文章

  1. setInterval 函数
  2. Server-U文件名中文乱码问题解决方法
  3. ffmpeg 转换VC工具 V1.1.1
  4. IE6 CSS高度height:100% 无效解决方法总结
  5. gnome3 修改桌面背景图片模式
  6. linux 关于数据库的部分命令
  7. 设计模式学习一:strategyPattern
  8. 人脸表情识别从0到部署,猜猜『轮到你了』的微笑狼人到底是谁!
  9. linux下挂载共享目录,linux下挂载windows的共享目录
  10. 建模算法(八)——插值