长度为n的环状串有n种表示法,分别为从某
个位置开始顺时针得到。例如,图3-4的环状串
有10种表示:
CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最小的称
为"最小表示"。
输入一个长度为n(n≤100)的环状DNA串(只包含A、C、G、T这4种字符)的一种表
示法,你的任务是输出该环状串的最小表示。例如,CTCC的最小表示是
CCCT,CGAGTCAGCT的最小表示为AGCTCGAGTC。

知识点
1.滚动表示数组 num[(i+ans)%len]
2.字典序小:
。所谓字典序,就是字符串在字典中的顺序。一般地,
对于两个字符串,从第一个字符开始比较,当某一个位置的字符不同时,该位置字符较小的
串,字典序较小(例如,abc比bcd小);如果其中一个字符串已经没有更多字符,但另一个
字符串还没结束,则较短的字符串的字典序较小(例如,hi比history小)。字典序的概念可
以推广到任意序列,例如,序列1, 2, 4, 7比1, 2, 5小。

E.g:(看例子更容易明白)
abc < abd
abc < bcd
abc < abcd
abc < ac

分析:学会了字典序的概念之后,本题就不难解决了:就像"求n个元素中的最小值"一样,用
变量ans表示目前为止,字典序最小串在输入串中的起始位置,然后不断更新ans。

错解(错在return less (rless)函数上)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 110int rless(const char *s, int p, int q){//比较p,q大小 int len = strlen(s);for(int i = 0; i < len; i++){if(s[(p+i)%len] < s[(q+i)%len])return 1;//可能让字典序大的更新//最新位置继续比较 }return 0;
} int main(){int len;char s[N];int T;scanf("%d", &T);while(T--){scanf("%s", s);len = strlen(s);int ans = 0;for(int i = 1; i < len; i++){if(rless(s, i, ans))ans = i;//不断比较更新最小字典序的开头位置 }for(int i = 0; i < len; i++)putchar(s[(i+ans)%len]);//(i+ans)%n 将最新的位置输出putchar('\n'); }return 0;
}

正解

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 110int rless(const char *s, int p, int q){//比较p,q大小 int len = strlen(s);for(int i = 0; i < len; i++){if(s[(p+i)%len] != s[(q+i)%len])return s[(p+i)%len] < s[(q+i)%len];//最新位置继续比较 }return 0;//如果全部相等
} int main(){int len;char s[N];int T;scanf("%d", &T);while(T--){scanf("%s", s);len = strlen(s);int ans = 0;for(int i = 1; i < len; i++){if(rless(s, i, ans))ans = i;//不断比较更新最小字典序的开头位置 }for(int i = 0; i < len; i++)putchar(s[(i+ans)%len]);//(i+ans)%n 将最新的位置输出putchar('\n'); }return 0;
}

例题3-6 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)相关推荐

  1. 环状序列(Circular Sequence,ACM/ICPC Seoul 2004,UVa1584)

    长度为n的环状串有n种表示法,分别为某个位置开始顺时针得到.CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等.在这些表示法中,字典序最小的称为"最小表示".输入一 ...

  2. 《算法竞赛入门经典》 例题3-5 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)

    原题及翻译 For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits ...

  3. 3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)

    输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量 小. 两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的 Hamming距离为 ...

  4. 例题3-5 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)

    如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1≤n≤100000),求最小 生成元.无解输出0.例如,n=216,121,2005时的解分别为198,0,1979. 先附上自己的想法 ...

  5. 生成元(Digit Generator ,ACM/ICPC Seoul 2005 ,UVa 1583)

    生成元:如果 x 加上 x 各个数字之和得到y,则说x是y的生成元. n(1<=n<=100000),求最小生成元,无解输出0. 例如:n=216 , 解是:198 198+1+9+8=2 ...

  6. 得分(Score,ACM/ICPC Seoul 2005,UVa1585)

    给出一个由O和X组成的串(长度为1~80),统计得分.每个O的得分为目前连续出现的O的个数,X的得分为0.例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3. 输入样例 5 OO ...

  7. 寻找生成元问题解决(Digit Generator,ACM/ICPC Seoul 2005, UVa1583)

    问题描述:如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1<=n<=10000),求最小生成元.无解时输出0.例如 n = 216,121,2005 时的解分别为198,0 ...

  8. 分子量 (Molar Mass, ACM/ICPC Seoul 2007, UVa1586)

    给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol),输入t个分子 ...

  9. 算法竞赛入门竞赛 习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)

    给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分 别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol).例如,C6 ...

最新文章

  1. 3dsMax插件V-Ray建筑可视化三维渲染细节技术学习教程
  2. linux系列(十六):which命令
  3. React开发(110):注意state定义的数据类型
  4. 第十二周学习进度报告
  5. tomcat启动成功 未加载项目_新里程|尚品食品国际贸易合伙人项目成功启动
  6. arcgis加载dwg显示一个点_shp文件转为dwg之后在arcgis下打开属性表有高程信息但在cad里面打开为何没高程 - 地学 - 小木虫 - 学术 科研 互动社区...
  7. Java-json系列(一):用GSON解析Json格式数据
  8. Commons Collections4 简单使用
  9. 一款功能强大、高颜值、官方出品的Redis可视化工具
  10. 1.什么是计算机图形学?
  11. 【铨顺宏项目推荐】RFID无线射频识别技术的设计思路
  12. 想自学编程?这么多编程自学网站,总有一个适合你吧!
  13. 【技术】BootStrapTable 滚动条控制
  14. E - Ricochet Robots( dfs+hash优化 )
  15. android 的导入crosswalk 用xwalkview 替换webview
  16. 单点登录-基于JWT机制的单点登录
  17. 90后在校大学生开旅游公司创业
  18. 打包软件一键安装_InstallShield2015PremierComp打包软件安装步骤
  19. 基于STM32的智能风扇系统
  20. 什么叫反光识别读数识别_回老家前 微信这个超实用小技巧一定要学会

热门文章

  1. 【好资源】473页斯坦福数学基础:《应用线性代数》(附pdf和ppt下载)
  2. 笔试题——max pooling滑动窗口实现(python 代码)
  3. JVM解读-性能调优实例
  4. 网络安全与机器学习(二):网络安全任务如何结合机器学习?
  5. selenium 常用操作
  6. LaTex in Markdown
  7. Visual Studio中断NPM套件库服务
  8. MySQL 5.7 密码策略
  9. mongodb log ,warning: chunk is larger than 65203623200 bytes because of key
  10. jQuery EasyUI DataGrid 分页 FOR ASP.NET