P1012 拼数 字符串

题目描述

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

例如:n=3n=3时,33个整数1313,312312,343343联接成的最大整数为:3433121334331213

又如:n=4n=4时,44个整数77,1313,44,246246联接成的最大整数为:74246137424613

输入输出格式

输入格式:

第一行,一个正整数nn。

第二行,nn个正整数。

输出格式:

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

输入输出样例

输入样例#1: 复制
3
13 312 343
输出样例#1: 复制
34331213

字符串交水的题
一开始cmp考虑了半天a了
#include<bits/stdc++.h>
using namespace std;
//input
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);i--)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m);
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define inf 0x3f3f3f3f
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
////////////////////////////////// bool cmp(string a,string b)
{
int lena=a.size();
int lenb=b.size();
int i;
for( i=;i<min(lena,lenb);i++)
if(a[i]!=b[i])break;
if(i!=min(lena,lenb))
return a[i]>b[i];
else
{
if(lena>lenb)
return a[ min(lena,lenb) ]>a[];
else if(lena<lenb)
return b[]>b[min(lena,lenb)];
}
}
int main()
{
string s[];
int n;
RI(n);
rep(i,,n)
cin>>s[i];
sort(s+,s++n,cmp);
rep(i,,n)
cout<<s[i];
return ;
}

但是可以直接加起来进行比较

#include<bits/stdc++.h>
using namespace std;
//input
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);i--)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m);
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define inf 0x3f3f3f3f
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
////////////////////////////////// bool cmp(string a,string b)
{
return a+b>b+a;
}
int main()
{
string s[];
int n;
RI(n);
rep(i,,n)
cin>>s[i];
sort(s+,s++n,cmp);
rep(i,,n)
cout<<s[i];
return ;
}

真是智商是硬伤


上一篇:ReactiveX 学习笔记(13)基础类型


下一篇:20172328 2018-2019《Java软件结构与数据结构》第八周学习总结