Advertisement
mickypinata

CUBE-T164: Treasure

May 2nd, 2020
567
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <math.h>
  4. using namespace std;
  5.  
  6. #define lli long long
  7.  
  8. vector<lli> room;
  9. int nr;
  10.  
  11. lli Sum(int l, int r){
  12.     return room[r] - room[l - 1];
  13. }
  14.  
  15. lli MinDiff(){
  16.     lli ans = 1e18;
  17.     for(int i = 2; i <= nr - 1; ++i){
  18.         lli s1 = Sum(1, i - 1);
  19.         int l = i;
  20.         int r = nr - 1;
  21.         while(l <= r){
  22.             int m = (l + r) / 2;
  23.             lli s2, s3;
  24.             lli d1 = abs(Sum(i, m - 1) - Sum(m, nr));
  25.             lli d2 = abs(Sum(i, m) - Sum(m + 1, nr));
  26.             if(d1 > d2){
  27.                 s2 = Sum(i, m);
  28.                 s3 = Sum(m + 1, nr);
  29.                 l = m + 1;
  30.             } else {
  31.                 s2 = Sum(i, m - 1);
  32.                 s3 = Sum(m, nr);
  33.                 r = m - 1;
  34.             }
  35.             ans = min(ans, max(abs(s1 - s2), max(abs(s1 - s3), abs(s2 - s3))));
  36.         }
  37.     }
  38.     return ans;
  39. }
  40.  
  41. int main(){
  42.  
  43.     int x;
  44.  
  45.     scanf("%d", &nr);
  46.     room.assign(nr + 1, 0);
  47.     for(int i = 1; i <= nr; ++i){
  48.         scanf("%d", &x);
  49.         room[i] = room[i - 1] + x;
  50.     }
  51.  
  52.     cout << MinDiff();
  53.  
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement