环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
来源:互联网 发布:网络热敏打印机 编辑:程序博客网 时间:2024/04/25 12:32
长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。例如,图3-4的环状串有10种表示:CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最小的称为”最小表示”。
输入一个长度为n(n≤100)的环状DNA串(只包含A、C、G、T这4种字符)的一种表示法,你的任务是输出该环状串的最小表示。
输入:
2
CTCC
CGAGTCAGCT
输出:
CCCT
AGCTCGAGTC
代码:
#include<stdio.h>#include<string.h>#define maxn 105//环状串s的表示法p是否比表示法q的字典序小int less(const char* s, int p, int q) { int n = strlen(s); int i; for(i = 0; i < n; i++) { if(s[(p+i)%n] != s[(q+i)%n])// return s[(p+i)%n] < s[(q+i)%n];//小为真,大为假 } return 0; //相等}int main() { int T; char s[maxn]; scanf("%d", &T); while(T--) { scanf("%s", s); int ans = 0, i;//ans表示目前为止,字典序最小串在输入串中的起始位置,然后不断更新ans int n = strlen(s); for(i = 1; i < n; i++) if(less(s, i, ans)) ans = i;//比较i与ans的大小,若真,将i的值辅助给ans for(i = 0; i < n; i++) putchar(s[(i+ans)%n]);//求得ans的位置然后从ans的位置往后输出s putchar('\n'); } return 0;}
注意:
1. 取余
2.ans:不断比较替换
0 0
- 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
- 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
- 环装序列 (Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
- UVa1584 环状序列 (Circular Sequence)
- 环状序列,ACM/ICPC,UVa1584
- UVa1584 Circular Sequence(环状序列) (java版本)
- Uva1584-环状序列-Circular Sequence-字典序
- 环状序列(UVa1584)
- 《算法竞赛入门经典2ndEdition 》例题3-6 环状序列(Circular Sequence, Uva1584)
- Uva1508 Circular Sequence 环状序列
- 习题5-2 Ducci序列(Ducci Sequence, ACM/ICPC Seoul 2009, UVa1594)
- UVA 1584 - Circular Sequence(环状序列)(字典序)
- UVa 1584 Circular Sequence(环状序列)
- UVa1584 - Circular Sequence
- UVA1584 - Circular Sequence
- uva1584 - Circular Sequence
- uva1584 Circular Sequence
- UVA1584 UVALive3225 Circular Sequence
- HDU 5232 Shaking hands
- ZOJ1004
- 胡伯涛论文阅读手记
- Leetcode 316
- javascript异步过程
- 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
- [土狗之路]coursera上C语言进阶习题 括号匹配
- Hdu2066(一个人的旅行)
- [WC2016]挑战NPC
- p275第十章函数和指针
- python教程1安装环境
- 《machine learning with spark》学习笔记--推荐模型
- Python 安装包,简易方法
- % 运算符 2