Advertisement
SuitNdtie

Campus

Jun 2nd, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | None | 0 0
  1. #include<stdio.h>
  2. typedef long long int ll;
  3.  
  4. ll abs(ll a){
  5.     return (a < 0 ? a*-1:a);
  6. }
  7.  
  8. struct dorm{
  9.     ll I;
  10.     ll J;
  11.     ll s;
  12. };
  13.  
  14. int main()
  15. {
  16.     int n;
  17.     scanf("%d",&n);
  18.     dorm d[n];
  19.     for(int i = 0 ; i < n ; i ++){
  20.         scanf("%lld %lld %lld",&d[i].I,&d[i].J,&d[i].s);
  21.     }
  22.     ll posI,posJ;
  23.     ll sumI,sumJ;
  24.     // I
  25. //  printf("Bsearch I : ");
  26.     ll L = 1 , R = 1e9;
  27.     while(L <= R){
  28.         ll m = (L+R)/2;
  29.     //  printf("%lld ",m);
  30.         ll a = m - 1 , b = m , c = m + 1;
  31.         ll sa = 0 , sb = 0 , sc = 0;
  32.         for(int i = 0 ; i < n ; i ++){
  33.             sa += abs(a - d[i].I)*d[i].s;
  34.             sb += abs(b - d[i].I)*d[i].s;
  35.             sc += abs(c - d[i].I)*d[i].s;
  36.         }
  37.         if(sa >= sb && sb <= sc){
  38.             posI = m;
  39.             sumI = sb;
  40.             break;
  41.         }
  42.         else if(sa > sb && sb > sc){
  43.             L = m + 1;
  44.         }
  45.         else if(sa < sb && sb < sc){
  46.             R = m - 1;
  47.         }
  48.         else{
  49.     //      printf("Error %lld %lld %lld <- %lld\n",sa,sb,sc,m);
  50.             return -1;
  51.         }
  52.     }
  53.    
  54.     //J
  55.     L = 1 , R = 1e9;
  56. //  printf("\nBsearch J : ");
  57.     while(L <= R){
  58.         ll m = (L+R)/2;
  59.     //  printf("%lld ",m);
  60.         ll a = m - 1 , b = m , c = m + 1;
  61.         ll sa = 0 , sb = 0 , sc = 0;
  62.         for(int i = 0 ; i < n ; i ++){
  63.             sa += abs(a - d[i].J)*d[i].s;
  64.             sb += abs(b - d[i].J)*d[i].s;
  65.             sc += abs(c - d[i].J)*d[i].s;
  66.         }
  67.         if(sa >= sb && sb <= sc){
  68.             posJ = m;
  69.             sumJ = sb;
  70.             break;
  71.         }
  72.         else if(sa > sb && sb > sc){
  73.             L = m + 1;
  74.         }
  75.         else if(sa < sb && sb < sc){
  76.             R = m - 1;
  77.         }
  78.         else{
  79.     //      printf("Error %lld %lld %lld <- %lld\n",sa,sb,sc,m);
  80.             return -1;
  81.         }
  82.     }
  83.    
  84.     printf("%lld",sumI+sumJ);
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement