Advertisement
YEZAELP

Merge Sort (PROG - 0038: Toppykung)

Apr 21st, 2021
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 1e3;
  6. string str[N+10];
  7. string L[N+10], R[N+10];
  8.  
  9. void merge(int l, int r){
  10.     int mid = (l + r) / 2;
  11.     int ll = mid - l + 1;
  12.     int lr = r - mid;
  13.     for(int i=1;i<=ll;i++) {
  14.         if(!L[i].empty()) L[i].clear();
  15.         L[i] += str[i+l-1];
  16.     }
  17.     for(int i=1;i<=lr;i++) {
  18.         if(!R[i].empty()) R[i].clear();
  19.         R[i] += str[mid+i];
  20.     }
  21.     int idx = l; // str[idx]
  22.     int idl = 1;
  23.     int idr = 1;
  24.     while(idl <= ll and idr <= lr){
  25.         str[idx].clear();
  26.         if(L[idl] <= R[idr]){
  27.             str[idx] += L[idl];
  28.             idl ++;
  29.         }
  30.         else {
  31.             str[idx] += R[idr];
  32.             idr ++;
  33.         }
  34.         idx ++;
  35.     }
  36.     while(idl <= ll){
  37.         str[idx].clear();
  38.         str[idx] += L[idl];
  39.         idl ++;
  40.         idx ++;
  41.     }
  42.     while(idr <= lr){
  43.         str[idx].clear();
  44.         str[idx] += R[idr];
  45.         idr ++;
  46.         idx ++;
  47.     }
  48. }
  49.  
  50. void MergeSort(int l, int r){
  51.     if(l == r) return;
  52.     int mid = (l + r) / 2;
  53.     MergeSort(l, mid);
  54.     MergeSort(mid+1, r);
  55.     merge(l, r);
  56. }
  57.  
  58. int main(){
  59.  
  60.     int n;
  61.     scanf("%d", &n);
  62.  
  63.     for(int i=1;i<=n;i++){
  64.         cin >> str[i];
  65.     }
  66.  
  67.     MergeSort(1, n);
  68.  
  69.     string prev;
  70.     for(int i=1;i<=n;i++){
  71.         if(str[i] != prev) cout << str[i] << "\n";
  72.         if(prev.size() > 0) prev.clear();
  73.         prev += str[i];
  74.     }
  75.  
  76.     return 0;
  77. }
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement