51Nod1097 составляет наименьшее число

проблема

Это имеет п положительное целое число, которые соединены в ряд, чтобы сформировать минимальное количество целых чисел.

Например:
когда п = 2, наименьшее целое число от 2 до 32321 подсоединена: 32132,
п = 4, наименьшее целое число 55,31,312 4, 33 соединен в: 312313355

Решение

Оптимальная строка символов а + Ь <Ь + а, может быть отсортирован.

NUM множество (х) х представляет собой строку чисел, NUM (A) 10 ^ | B | + NUM (B) <NUM (В) 10 ^ | | + NUM (A) -> NUM (A) / ( 10 ^ | а | -1) < Num (б) / (10 ^ | Ь | -1), могут быть отсортированы.

Code1

#include<stdio.h>
#include<math.h>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define io_opt ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
string s[10020];
int n;
int cmp(string x,string y){
    return x+y<y+x;
}
int main(){
    io_opt;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>s[i];
    }
    sort(s+1,s+1+n,cmp);
    string ans="";
    for(int i=1;i<=n;i++){
        ans+=s[i];
    }
    for(int i=0;i<ans.size();i++){
        if(i!=0&&i%1000==0) cout<<endl;
        cout<<ans[i];
    }
    return 0;
}

Кодекса2

#include<stdio.h>
#include<math.h>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long double ld;
#define io_opt ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
struct E{
    int x,len;
}e[10020];
int n;
int t[20]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
int cmp(E x,E y){
    return (ld)x.x/(t[x.len]-1)<(ld)y.x/(t[y.len]-1);
}
int cur=0,tmp[20];
int main(){
    io_opt;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>e[i].x;
        e[i].len=0;
        int xx=e[i].x;
        while(xx){
            e[i].len++;
            xx/=10;
        }
    }
    sort(e+1,e+1+n,cmp);
    int cnt=0;
    for(int i=1;i<=n;i++){
        cur=0;
        while(e[i].x){
            tmp[++cur]=e[i].x%10;
            e[i].x/=10;
        }
        for(int j=cur;j>=1;j--){
            cout<<tmp[j];
            cnt++;
            if(cnt%1000==0){
                cout<<endl;
            }
        }
    }
    return 0;
}

рекомендация

отwww.cnblogs.com/sz-wcc/p/11704810.html
рекомендация