UVA 1584
来源:互联网 发布:java基础免费教程视频 编辑:程序博客网 时间:2024/05/16 14:29
这道题是个大水题,是我太渣了,在写算法排字典序的时候忘记只要两个字符串不相等就会出比较结果这个常识。然后我就一直卡在这里。。。
这个题有一个亮点,那就是所给字符串的n种形态相互对比的时候n种字符串的转换。最开始的时候我想先生成n个字符串再排序找出字典序最小的字符串,但是意识到这个花的时间有点长,然后借鉴了刘汝佳所给的思路,设置两个字符串,一个储存初始字符串,一个储存最小字符串,然后用选择排序法的思想将第一个字符串设为最小串,然后从n个字符逐个边生成新字符串边并做判断,只要发现某个字符和对应位置上的最小链的字符不一致则刷新最小串。
后来我又对其进行优化,得到的可选处理这种问题的思路是:
用一个循环遍历整个字符串的各个字符,并以该字符为新串的基点但只调用对应的字符不生成新串,逐个对比最小串和当前串相应位置的字符,如果不同就停止比较,然后视情况刷新最小串。
下附代码:
#include <iostream>#include <algorithm>#include <cstdio>using namespace std;string line1, line2;int len;void cmp(int pos){ bool key = false; //string mid = ""; int mid = pos; for(int i = 0; i < len; i++, pos++) { char letter1 = line1[pos % len]; char letter2 = line2[i]; // cout << letter1 << " " << letter2 << endl; if(letter1 < letter2) { key = true; break; } else if(letter1 > letter2) { break; } } if(key) { for(int i = 0; i < len; i++, mid++) { line2[i] = line1[mid % len]; } }}void Test(){ line2 = line1; for(int i = 1; i < len; i++) { cmp(i); // cout << endl; }}int main(){ int t; scanf("%d", &t); while(t--) { cin >> line1; len = line1.size(); Test(); cout << line2 << endl; }}
阅读全文
0 0
- UVA 1584
- UVa 1584
- UVA-1584
- UVa 1584
- UVA 1584
- UVA 1584
- UVa 1584
- uva 1584
- UVa 1584 Circular Sequence
- UVa 1584 - Circular Sequence
- UVA 1584 - Circular Sequence
- UVA - 1584 Circular Sequence
- UVa 1584 - Circular Sequence
- UVa-1584Circular Sequence
- 【Uva 1584】 Circular Sequence
- UVa 1584 - Circular Sequence
- UVA 1584 Circular Sequence
- Uva 1584 Circular Sequence
- 数据结构面试题/判断一棵树是否是完全二叉树
- JSON格式转为JSON对象的方式
- bootstrap标签页和工具提示插件
- 自制编程语言CXScript(三) 如何实现if语句、else语句并实现分支跳转
- 京东三级列表页持续架构优化—前端优化实践
- UVA 1584
- 运行yum时出现/var/run/yum.pid已被锁定,PID为xxxx的另一个程序正在运行的问题解决
- 音视频 图像处理
- 【问题集】window.open使用被拦截问题
- POJ 3221:Diamond Puzzle(六数码 反向bfs)
- CSS 关闭按钮实现
- HDU
- 使用浏览器在JavaScript程序中的错误与调试
- 没有脚本的JSP