【题解】洛谷P1012 拼数

156 阅读1分钟

[NOIP1998 提高组] 拼数

题目描述

设有 nn 个正整数 a1ana_1 \dots a_n,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

输入格式

第一行有一个整数,表示数字个数 nn

第二行有 nn 个整数,表示给出的 nn 个整数 aia_i

输出格式

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

样例 #1

样例输入 #1

3
13 312 343

样例输出 #1

34331213

样例 #2

样例输入 #2

4
7 13 4 246

样例输出 #2

7424613

题解

#include<iostream>
#include<string>
#include<algorithm> 

using namespace std;

bool cmp(string s1, string s2) {
	return s1 + s2 > s2 + s1;
}

int main() {
	int n;
	scanf("%d", &n);
	string s[n]; 
	for(int i = 0; i < n; i++) {
		cin >> s[i];
	} 
	sort(s, s + n, cmp);
	for(int i = 0; i < n; i++) {
		printf("%s", s[i].c_str());
	} 	
	return 0;
}

本题得到的启发

对这里sort排序的理解

image.png

  • 以本题的样例#2为例,对7 13 4 246进行sort后的结果为7 4 246 13,都能满足s1 + s2 > s2 + s1,例如7246 > 2467413 > 134