1 条题解
-
1
#include<bits/stdc++.h> using namespace std; bool cmp(string a,string b) { int l1=a.length(),l2=b.length(),l; string k,c; l=l1>l2?l2:l1; for(int i=0; i<l; i++) { if(a[i]==b[i])continue; else return a[i]>b[i]; } k=(l1>l2?a:b); c=(l1>l2?b:a); if(k[l]>a[0])return k<c; return l1<l2; } int main() { int n; string a[10086]; cin>>n; for(int i=0; i<n; i++) cin>>a[i]; sort(a,a+n,cmp); for(int i=0; i<n; i++)cout<<a[i]; }
待会儿讲一下cmp来了。bool cmp(string a,string b) { int l1=a.length(),l2=b.length(),l; string k,c; l=l1>l2?l2:l1; for(int i=0; i<l; i++) { if(a[i]==b[i])continue; else return a[i]>b[i]; } k=(l1>l2?a:b); c=(l1>l2?b:a); if(k[l]>a[0])return k<c; return l1<l2; }
首先这个自定义函数是作为bool类型在sort中被应用的。因此他的形参为两个字符串。 对于给定的几个数字字符串,我想到的尽可能大的排序方式是这样的:
-
从第一位开始比较,若第a[n]>b[n],那么便输出a,b;如32与23。3223>2332. 321与23,32123>23321.
-
如果可以两数位数不对等,且可以比较的位数都相等呢?由于在输出时,总是先输出a在输出b的。若前n位都相同,那么就比较n+1位是否大于第一位。如325和32。5>3因此32532>32325.
这其实就是所有的思路了。实现成代码,就是
cmp
函数了。
-
- 1
信息
- ID
- 227
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 7
- 标签
- 递交数
- 33
- 已通过
- 8
- 上传者