Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e3;
- string str[N+10];
- string L[N+10], R[N+10];
- void merge(int l, int r){
- int mid = (l + r) / 2;
- int ll = mid - l + 1;
- int lr = r - mid;
- for(int i=1;i<=ll;i++) {
- if(!L[i].empty()) L[i].clear();
- L[i] += str[i+l-1];
- }
- for(int i=1;i<=lr;i++) {
- if(!R[i].empty()) R[i].clear();
- R[i] += str[mid+i];
- }
- int idx = l; // str[idx]
- int idl = 1;
- int idr = 1;
- while(idl <= ll and idr <= lr){
- str[idx].clear();
- if(L[idl] <= R[idr]){
- str[idx] += L[idl];
- idl ++;
- }
- else {
- str[idx] += R[idr];
- idr ++;
- }
- idx ++;
- }
- while(idl <= ll){
- str[idx].clear();
- str[idx] += L[idl];
- idl ++;
- idx ++;
- }
- while(idr <= lr){
- str[idx].clear();
- str[idx] += R[idr];
- idr ++;
- idx ++;
- }
- }
- void MergeSort(int l, int r){
- if(l == r) return;
- int mid = (l + r) / 2;
- MergeSort(l, mid);
- MergeSort(mid+1, r);
- merge(l, r);
- }
- int main(){
- int n;
- scanf("%d", &n);
- for(int i=1;i<=n;i++){
- cin >> str[i];
- }
- MergeSort(1, n);
- string prev;
- for(int i=1;i<=n;i++){
- if(str[i] != prev) cout << str[i] << "\n";
- if(prev.size() > 0) prev.clear();
- prev += str[i];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement