(UVA)1584
来源:互联网 发布:安知玉如意txt网盘 编辑:程序博客网 时间:2024/06/05 09:13
题意:求长度为n的环状串字典序的最小表示法(顺时针)。
分析:遍历求使得字典序最小的起始点的位置就可以。
我的代码:
#include <bits/stdc++.h>using namespace std;int ord(const char* s, int p, int 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 t,i; char s[105]; for(scanf("%d",&t);t;t--) { scanf("%s",s); int len=strlen(s),ans=0; for(i=1;i<len;i++) if(ord(s,i,ans)) ans=i; for(i=0;i<len;i++) printf("%c",s[(ans+i)%len]); printf("\n"); } return 0;}作者示范代码:
// UVa1584(LA3225) Circular Sequence// Rujia Liu#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); for(int 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; int n = strlen(s); for(int i = 1; i < n; i++) if(less(s, i, ans)) ans = i; for(int i = 0; i < n; i++) putchar(s[(i+ans)%n]); putchar('\n'); } return 0;}
0 0
- (UVA)1584
- UVA 1584
- UVa 1584
- UVA-1584
- UVa 1584
- UVA 1584
- UVA 1584
- UVa 1584
- uva 1584
- uva 445 uva 489 uva 490 uva 694(模拟)
- UVA - 1584 Circular Sequence(水)
- uva 10105 uva 10910 uva 10943(排列组合C)
- uva 10183 uva 10519 uva 10516(java 大叔)
- 数论专题(一) Uva 10780+Uva 10892+Uva 11076
- uva 12293 uva 11892 (简单博弈)
- uva - UVA 1388 - Graveyard (数学推理)
- UVa 1584 Circular Sequence
- UVa 1584 - Circular Sequence
- requirejs初体验
- Android提高后台服务进程优先级
- android studio使用过程中遇到的问题
- POJ P2442 Sequence
- Java代码优化技巧
- (UVA)1584
- expect的基本用法
- 抽象工厂--Java实现
- linux, kill掉占用60%多cpu的进程,几秒后换个pid 和 command 又出现?
- 应用require.js进行javascript模块化编程小试一例
- (3)ArcGIS 10.2 链接64位Oracle数据库
- 无限重启病毒
- Win下必备神器之Cmder
- maven下载部署以及环境变量配置