codevs 1860 最大数
2017-11-29 11:18
190 查看
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int n; struct AC { char sh[10010]; }a[21]; bool comp(AC x,AC y) { int k=0; while((x.sh[k]==y.sh[k])&&k<strlen(x.sh)-1&&k<strlen(y.sh)-1) { k++; } if(x.sh[k]!=y.sh[k]) { return x.sh[k]>y.sh[k]; } if(k==(strlen(x.sh)-1)) { if(k!=(strlen(y.sh)-1)) { return x.sh[0]>y.sh[k+1]; } } if(k==(strlen(y.sh)-1)&&k!=(strlen(x.sh)-1)) { return x.sh[k+1]>y.sh[0]; } return x.sh[k]>y.sh[k]; } int main() { cin>>n; for(int i=0;i<n;i++) { scanf("%s",&a[i].sh); } sort(a,a+n,comp); for(int i=0;i<n;i++) { printf("%s",a[i].sh); } }
这是我 第一眼的方法 利用STL 自带的sort 加上 我自己的判断 条件,成功地把题水过
然而 看过其他人题解 才发现 这实属多余 利用 两个字符串,首尾相连,比较大小 更快更强更短
bool comp(string a,string b){return a+b>b+a;}
相关文章推荐
- codevs 1033蚯蚓的游戏 (最大费用流
- codevs1922(二分图最大独立集)
- Codevs 1993 草地排水 [dinic] [最大流]
- code[vs] 1501 二叉树最大宽度和高度
- CODE[VS] 青铜Bronze 整数处理 1201:最小数和最大数
- 【Codevs1034】家园(最大流,裂点)
- 【BZOJ1834】【codevs1362】网络扩容,最大流+费用流
- Codevs 1501 二叉树最大宽度和高度(笔记)
- codevs天梯 乘积最大
- codevs 3981 动态最大子段和
- CODE[vs] 天梯 1501 二叉树最大宽度和高度
- CODE[VS] NO.1501 二叉树最大宽度和高度
- 乘积最大codevs1017(noip2000)
- Code[VS] 1012 最小公倍数与最大公约数
- 【BZOJ1433】【codevs2347】假期的宿舍,最大流
- Codevs P1017 乘积最大
- codevs 1017 乘积最大
- 【codevs2440】【BZOJ1066】蜥蜴,最大流
- CODEVS1187 Xor最大路径 (Trie树)
- Code[VS] 1017 乘积最大 (划分型DP)