Advertisement
Guest User

ebal

a guest
Nov 26th, 2015
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.06 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define itn int
  4.  
  5. using namespace std;
  6.  
  7. void msd(vector<string>& a, int l, int r, int d = 0){
  8.     if (r-1-l <= 0)
  9.         return;
  10.     vector<vector<int> > indices(256);
  11.     for (int i = l; i < r; i++){
  12.         if (d < a[i].length())
  13.             indices[a[i][d]].push_back(i);
  14.         else
  15.             indices[0].push_back(i);
  16.     }
  17.     vector<int> place;
  18.     vector<int> initialIndex;
  19.     for (int i = l; i < r; ++i){
  20.         place.push_back(i);
  21.         initialIndex.push_back(i);
  22.     }
  23.     int cntSwap = 0;
  24.     for (int i = 0; i < 256; ++i){
  25.         for (int j = 0; j < indices[i].size(); ++j){
  26.             a[cntSwap+l].swap(a[place[indices[i][j] - l]]);
  27.             swap(initialIndex[cntSwap], initialIndex[place[indices[i][j]-l]-l]);
  28.             swap(place[indices[i][j]-l], place[initialIndex[place[indices[i][j]-l]-l]-l]);
  29.             cntSwap++;
  30.         }
  31.         if (i != 0)
  32.             msd(a, cntSwap - indices[i].size() + l, cntSwap + l, d+1);
  33.     }
  34. }
  35.  
  36. int main(){
  37.     string s;
  38.     vector<string> a;  
  39.     while (getline(cin, s)){
  40.         a.push_back(s);
  41.     }
  42.     int n = a.size();
  43.     msd(a, 0, n);
  44.  
  45.     for (int i = 0; i < n; ++i)
  46.         cout << a[i] << endl;
  47.    
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement