题解:P1012 [NOIP 1998 提高组] 拼数
思路 + 证明
这题明显贪心,先把所有数按照字符串输入进来,很容易想到的一个就是按照 return a + b > b + a 来对字符串进行排序。接下来将用一种简单的方式证明为何这种策略是对的。
首先,我们不妨设正整数 a + b > b + a 这一贪心策略。
代码
//I'm milk dragon
#include<bits/stdc++.h>
const int N = 25;
using namespace std;
string s[N];
bool cmp(string a, string b)
{
return a + b > b + a; //套用贪心策略,如果a + b更大,就让 a 排在 b 前面
}
int main()
{
int n;
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;
}