您的位置:首页 > 其它

洛谷 P1012 拼数 1998提高组

2017-06-22 16:34 435 查看

1. Problem Description–

设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。

例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213

又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613

2. Input

第一行,一个正整数n。

第二行,n个正整数。

3. Output

一个正整数,表示最大的整数

输入样例#1:

3

13 312 343

输出样例#1:

34331213

4. 详解

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int M=30;
int n;
string a[M];
void init(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
//cout<<a[i]<<endl;
}
}

bool comp(string x,string y){
if(x+y>y+x)return 1;
else return 0;
}

void qsort(int l,int r){
int i=l,j=r;
string mid=a[(i+j)/2],t;
while(i<=j){
while(comp(a[i],mid))i++;
while(comp(mid,a[j]))j--;
if(i<=j){
t=a[i];a[i]=a[j];a[j]=t;
//  for(int i1=1;i1<=n;i1++)cout<<a[i1]<<" ";
//  cout<<endl;
i++;j--;
}
}
if(i<r)qsort(i,r);
if(l<j)qsort(l,j);
}
bool ok(int x,int y){
int x1=a
.length(),y1=a[n-1].length();
for(int i=0;i<min(x1,y1);i++){
if(a[x][i]!=a[y][i])return 0;
}
return 1;
}
int main(){
freopen("P1012拼数.in","r",stdin);
string t;
init();
qsort(1,n);
for(int i=1;i<=n;i++)cout<<a[i];
fclose(stdin);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: