链接:https://ac.nowcoder.com/acm/problem/16783
这个题的贪心方法真的很巧妙。按字符串的"优先级"进行比较,大的放在前面小的放后面。那么问题来了这个优先级是啥?
提前声明一点,字符串string比较大小时,就是按照字典序进行比较的。
优先级是(a>b)吗?
恐怕不是,因为 "9123">"9",如果这样安排的话答案是91239但正确答案是99123
所以真正的优先级是(a+b>b+a),如果(a+b)>(b+a)把a放前面,否则把b放在前面。
举个例子:
n=3 9123 9 8
按照优先级:
9和9123都大于8,又因为99123大于91239所以,
优先级9 9123 8.
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
#include <cmath>
#include <map>
#include <set>
#define inf 0xffffff
using namespace std;
typedef long long ll;
bool cmp(string a,string b)
{
return (a+b)>(b+a);
}
vector<string>ss;
int main()
{
int n;
cin >> n;
for(int i=0;i<n;i++)
{
string tmp;
cin >> tmp;
ss.push_back(tmp);
}
sort(ss.begin(),ss.end(),cmp);
for(int i=0;i<ss.size();i++)
cout << ss[i];
}


京公网安备 11010502036488号