拼数
拼数
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