Advertisement
Guest User

Untitled

a guest
May 27th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1.  
  2. int Solve(const vector<int>& data) {
  3.     long long lo = data.front();
  4.     long long hi = data.back();
  5.     long long curr_dist = 0;
  6.     int curr_houses_num = 0;
  7.     vector<long long> left_houses_dist;
  8.  
  9.     for (int i = lo, j = 0; i <= hi; ++i) {
  10.         curr_dist += curr_houses_num;
  11.         left_houses_dist.push_back(curr_dist);
  12.         if (data[j] == i) {
  13.             ++curr_houses_num;
  14.             ++j;
  15.         }
  16.     }
  17.  
  18.     curr_dist = 0;
  19.     curr_houses_num = 0;
  20.     vector<long long> right_houses_dist;
  21.  
  22.     for (int i = hi, j = data.size() - 1; i >= lo; --i) {
  23.         curr_dist += curr_houses_num;
  24.         right_houses_dist.push_back(curr_dist);
  25.         if (data[j] == i) {
  26.             ++curr_houses_num;
  27.             --j;
  28.         }
  29.     }
  30.  
  31.     long long smallest_dist = numeric_limits<int>::max();
  32.     long long smallest_dist_pos = -1;
  33.     long long N = right_houses_dist.size();
  34.     for (auto i = 0; i < N; ++i) {
  35.         auto curr_total_dist = left_houses_dist[i] + right_houses_dist[N - i - 1];
  36.         if (curr_total_dist <= smallest_dist) {
  37.             smallest_dist = curr_total_dist;
  38.             smallest_dist_pos = lo + i;
  39.         }
  40.     }
  41.     return smallest_dist_pos;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement