贪心&&字符串
原题链接
不知道这是第几次做这类题了
对于两个数a和b,
我们考虑微调
- 若a放在前面,则数字为(a+b)(这里的+号表示将b连在a后面)
- 若b放在前面,则数字为(b+a)
- 则只需比较a+b与b+a的大小关系即可
- 即可以判断哪个数一定放在前面
问题来了,怎样实现呢,两两对比?
我们发现string 刚好满足我们需要进行的操作,这时我们可以用string
再造一个cmp
bool cmp(string x,string y){
return x+y>y+x;
}
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N=25;
int n;
string s[N];
bool cmp(string x,string y){
return x+y>y+x;
}
int main(){
scanf("%d",&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];
}
}