Advertisement
mickypinata

PROG-T1139: Campus

Apr 18th, 2020
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <tuple>
  4. #include <math.h>
  5. using namespace std;
  6.  
  7. #define lli long long
  8. #define tiii tuple<int, int, int>
  9.  
  10. vector<tiii> dorm;
  11. int nd;
  12.  
  13. lli SumDist(lli place, int mode){ /// 0 => Row 1 => Col
  14.     lli sum = 0;
  15.     for(auto d : dorm){
  16.         int p = (mode == 0)? get<0>(d) : get<1>(d);
  17.         int stu = get<2>(d);
  18.         sum += (abs(p - place)) * stu;
  19.     }
  20.     return sum;
  21. }
  22.  
  23. lli BSBuilding(int mn, int mx, int mode){ /// 0 => Row 1 => Col
  24.     lli l = mn;
  25.     lli r = mx - 1;
  26.     lli ans = 1e18;
  27.     while(l <= r){
  28.         lli m = (l + r) / 2;
  29.         lli s1 = SumDist(m, mode);
  30.         lli s2 = SumDist(m + 1, mode);
  31.         ans = min(ans, min(s1, s2));
  32.         if(s1 > s2){
  33.             l = m + 1;
  34.         } else {
  35.             r = m - 1;
  36.         }
  37.     }
  38.     return ans;
  39. }
  40.  
  41. int main(){
  42.  
  43.     int r, c, stu, mxr, mnr, mxc, mnc;
  44.     scanf("%d", &nd);
  45.  
  46.     mxr = 1;
  47.     mnr = 1e9;
  48.     mxc = 1;
  49.     mnc = 1e9;
  50.     for(int i = 0; i < nd; ++i){
  51.         scanf("%d %d %d", &r, &c, &stu);
  52.         dorm.emplace_back(r, c, stu);
  53.         mxr = max(mxr, r);
  54.         mnr = min(mnr, r);
  55.         mxc = max(mxc, c);
  56.         mnc = min(mnc, c);
  57.     }
  58.  
  59.     cout << BSBuilding(mnr, mxr, 0) + BSBuilding(mnc, mxc, 1);
  60.  
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement