Advertisement
EleonoraWhite

Untitled

Apr 24th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 KB | None | 0 0
  1. int textFormatting(vector <int> starting, vector <int> ending, vector <char> style) {
  2.     int max_coord = 0;
  3.     int n = starting.size();
  4.    
  5.     for (int i = 0; i < n; ++i) {
  6.         max_coord = max(max_coord, ending[i]);
  7.     }
  8.    
  9.     max_coord += 2;
  10.    
  11.     int letters_b[1000000];
  12.     int letters_i[1000000];
  13.     int letters_u[1000000];
  14.    
  15.     for (int i = 0; i < n; ++i) {
  16.         if (style[i] == 'b') {
  17.             letters_b[starting[i]]++;
  18.             letters_b[ending[i] + 1]--;
  19.         }
  20.     }
  21.    
  22.     for (int i = 0; i < n; ++i) {
  23.         if (style[i] == 'i') {
  24.             letters_i[starting[i]]++;
  25.             letters_i[ending[i] + 1]--;
  26.         }
  27.     }
  28.    
  29.     for (int i = 0; i < n; ++i) {
  30.         if (style[i] == 'u') {
  31.             letters_u[starting[i]]++;
  32.             letters_u[ending[i] + 1]--;
  33.         }
  34.     }
  35.    
  36.     vector <pair <pair <int, int>, char> > sect;
  37.    
  38.     int pos = 0;
  39.     int l = 0;
  40.    
  41.     for (int i = 0; i < max_coord; i++) {
  42.         pos += letters_b[i];
  43.        
  44.         //cout << pos << ' ' << l << endl;
  45.        
  46.         if (pos > 0) {
  47.             if (l == 0) {
  48.                 l = i;
  49.             }
  50.         } else if (l != 0) {
  51.             sect.push_back(make_pair(make_pair(l, i - 1), 'b'));
  52.             l = 0;
  53.         }
  54.     }
  55.    
  56.     l = 0;
  57.     pos = 0;
  58.    
  59.     for (int i = 0; i < max_coord; i++) {
  60.         pos += letters_i[i];
  61.        
  62.         if (pos > 0) {
  63.             if (l == 0) {
  64.                 l = i;
  65.             }
  66.         } else if (l != 0) {
  67.             sect.push_back(make_pair(make_pair(l, i - 1), 'i'));
  68.             l = 0;
  69.         }
  70.     }
  71.    
  72.     l = 0;
  73.     pos = 0;
  74.    
  75.     for (int i = 0; i < max_coord; i++) {
  76.         pos += letters_u[i];
  77.        
  78.         if (pos > 0) {
  79.             if (l == 0) {
  80.                 l = i;
  81.             }
  82.         } else if (l != 0) {
  83.             sect.push_back(make_pair(make_pair(l, i - 1), 'u'));
  84.             l = 0;
  85.         }
  86.     }
  87.    
  88.     sort(sect.begin(), sect.end());
  89.    
  90.     int res = 2;
  91.    
  92.     for (int i = 1; i < (int) sect.size(); ++i) {
  93.         if (sect[i] == sect[i - 1]) {
  94.             res += 0;
  95.         } else if (sect[i].first == sect[i - 1].first) {
  96.             res += 1;
  97.         } else {
  98.             res += 2;
  99.         }
  100.     }
  101.    
  102.     return res;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement