您的位置:首页 > 其它

PAT 1038. Recover the Smallest Number (30) 字符串大小比较

2017-08-28 21:14 281 查看

1038. Recover the Smallest Number (30)

时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueGiven a collection of number segments, you are supposed to recover the smallest number from them. For example, given {32, 321, 3214, 0229, 87}, we can recover many numbers such like 32-321-3214-0229-87 or 0229-32-87-321-3214 with respect to different ordersof combinations of these segments, and the smallest number is 0229-321-3214-32-87.Input Specification:Each input file contains one test case. Each case gives a positive integer N (<=10000) followed by N number segments. Each segment contains a non-negative integer of no more than 8 digits. All the numbers in a line are separated by a space.Output Specification:For each test case, print the smallest number in one line. Do not output leading zeros.Sample Input:
5 32 321 3214 0229 87
Sample Output:
22932132143287
想了半天没想明白怎么判断两个字符串的排序关系,比如 578和5781这种。看了人家的比较,拍案叫绝。
附上我的代码
#include<string>#include<stdio.h>#include<iostream>#include<string.h>#include<queue>#include<algorithm>using namespace std;bool cmp1(string x,string y){string xy="";string yx="";xy+=x;xy+=y;yx+=y;yx+=x;return xy<yx;}int main(){int n;cin>>n;string aa[10005];for(int i=0;i<n;i++)cin>>aa[i];sort(aa,aa+n,cmp1);string last="";for(int i=0;i<n;i++)last+=aa[i];int p=0;while(last[p]=='0') p++;if(p==last.size()) cout<<'0';elsefor(;p<last.size();p++)cout<<last[p];return 0;}

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