您的位置:首页 > 其它

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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: