拼数

拼数

https://ac.nowcoder.com/acm/problem/16783

思路:
贪心
1.n个整数,字典序最大的在前面,很容易想到这个策略,但是有一组反例:
3 31 39
结果应该是39331,而不是39313。
2.所以我们要改变策略,还是假定AB前面和后面已经有序了,而且AB不影响后面和前面的结果。
3.要A排前面更优,就要AB的字典序比BA的字典序大。
4.总的策略可以按照3的规则排序,然后依次输出就行。
Code:

#include<bits/stdc++.h>
#define  js  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
typedef long long ll;
bool cmp(string a,string b) {
    string x=a+b,y=b+a;
    for(int i=0;i<x.size();++i) {
        if(x[i]==y[i]) continue;
        return x[i]>y[i];
    }
    return true;
}
string a[25];
int main() {
    js; int n;
    cin>>n;
    for(int i=1;i<=n;++i) cin>>a[i];
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;++i) cout<<a[i];
    cout<<"\n";
    return 0;
}

为雨巨打call

全部评论

相关推荐

牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
8 收藏 评论
分享
牛客网
牛客企业服务