题目描述 Description
小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢?
你的任务就是读入 n n n个数字积木,求出所能形成的最大数。
输入 Input
输入文件brick.in共 N + 1 N+1 N+1行。
第一行是一个整数 n n n,接下来 n n n行每行是一个正整数
输出 Output
输出文件brick.out共一行。
第一行一个整数,为所能形成的最大整数。
样例输入 Sample Input
3
13
131
343
样例输出 Sample Output
34313131
限制 Limits
对于 30 % 30\% 30%的数据, n ≤ 10 n≤10 n≤10,每个数 ≤ 1 0 3 ≤10^3 ≤103。
对于 50 % 50\% 50%的数据, n ≤ 100 n≤100 n≤100。
对于 100 % 100\% 100%的数据, n ≤ 1000 n≤1000 n≤1000,每个数 ≤ 1 0 200 ≤10^{200} ≤10200。
23333333第一眼看好诡异的题…
选择贪心思想,因为这几个块组成的数位数是确定的,要组成的数尽可能大,就要使越靠前的数尽可能大。
但是怎么使靠前的数尽可能大?显然根据样例单纯判断数字大小不可取。
样例中:
13
<
131
13<131
13<131,而
13
13
13要放在
131
131
131前面…
于是,考虑两个串
a
a
a和
b
b
b应该如何放入答案…
a
a
a与
b
b
b组合只有两种方式,
a
+
b
a+b
a+b和
b
+
a
b+a
b+a,那么就可以按
a
+
b
>
b
+
a
a+b>b+a
a+b>b+a排序,得到的排序后序列即为最优解。
Code