Untitled

 avatar
unknown
plain_text
10 months ago
1.2 kB
2
Indexable
#include <cctype>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

pair<string, int> a[500000];
string smax(string a, string b){
    int la = a.size(), lb = b.size(), m = 0, n = 0;
    while((m < la) && (a[m] == '0')) m++;
    while((n < lb) && (b[n] == '0')) n++;
    la -= m; lb -= n;
    if(la > lb) return a;
    else if(la < lb) return b;
    else{
        for(int i = 0; i < la; i++){
            if(a[m+i] > b[n+i]) return a;
            else if(a[m+i] < b[n+i]) return b;
        }
        return "=";
    }
}
int cmp(pair<string, int> a, pair<string, int> b){
    string s = smax(a.first, b.first);
    if(s == "=") return a.second < b.second;
    else return s == b.first;
}

int main() {
    string s, tmp; cin >> s;
    int n = 0;
    for(int i = 0; i < s.size(); i++){
        tmp = "";
        while(isdigit(s[i]))
            tmp += s[i++];
        if(tmp != ""){
            a[n] = make_pair(tmp,n);
            n++;
        }     
    }
    sort(a, a+n, cmp);
    for(int i = 0; i < n; i++) cout << a[i].first << " " ;
    cout << endl;
    
    return 0;
}
Editor is loading...
Leave a Comment