貪心+字串排序——拼數
阿新 • • 發佈:2019-02-17
題目來源
洛谷P1012拼數
https://www.luogu.org/problem/show?pid=1012
題目描述
設有n個正整數(n≤20),將它們聯接成一排,組成一個最大的多位整數。例如:n=3時,3個整數13,312,343聯接成的最大整數為:34331213
又如:n=4時,4個整數7,13,4,246聯接成的最大整數為:7424613
輸入輸出格式
輸入格式:
第一行,一個正整數n。
第二行,n個正整數。
輸出格式:
一個正整數,表示最大的整數
輸入輸出樣例
輸入樣例
3
13 312 343
輸出樣例
34331213
思路
貪心 數字大的儘量在前
程式碼(C++)
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
string s[25];
bool cmp(string x,string y)
{
int l1=x.size(),l2=y.size(),i=0;
while(x[i]==y[i]&&i<l1&&i<l2) i++;
if(i==l1)
{
if(i==l2) return 1;
if(x[0]<=y[i]) return 0;
return 1;
}
if(i==l2)
{
if(y[0]<=x[i]) return 1;
return 0;
}
if(x[i]<y[i]) return 0;
return 1;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>s[i];
sort(s+1,s+n+1,cmp);
for(int i=1;i<=n;i++)
cout<<s[i];
return 0;
}