题意:
给定多个字符串,求用这些字符串组成的最小数字,允许前导0的情况。
题解:
对所有字符串进行排序即可,排序规则:取两个字符串,一前一后,一后一前两种方式连接比较字典序的大小,当然如果两者长度相等就直接比较即可。
#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define int long long
#define endl '\n'
#define N 100005
#define fi first
#define se second
#define pb push_back
using namespace std;
const int inf=0x3f3f3f3f;
const double ex=acos(-1);
const int mod=1e11+3;
int gcd(int a,int b){return b? gcd(b,a%b) : a ;}
typedef pair<int,int>PII;
priority_queue<int,vector<int>,greater<int> > q;
int a[N];
bool cmp(string a,string b)
{
if(a.size()==b.size()) return a<b;
string l=a+b,r=b+a;
return l<r;
}
void solve()
{
int n;
cin >>n;
string s[n+1];
for(int i=0;i<n;i++)
{
cin >>s[i];
}
sort(s,s+n,cmp);
for(auto it : s) cout <<it;
}
signed main()
{ios
int t = 1;
//cin >> t;
while (t--)
{
solve();
}
return 0;
}