Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- typedef long long int ll;
- ll abs(ll a){
- return (a < 0 ? a*-1:a);
- }
- struct dorm{
- ll I;
- ll J;
- ll s;
- };
- int main()
- {
- int n;
- scanf("%d",&n);
- dorm d[n];
- for(int i = 0 ; i < n ; i ++){
- scanf("%lld %lld %lld",&d[i].I,&d[i].J,&d[i].s);
- }
- ll posI,posJ;
- ll sumI,sumJ;
- // I
- // printf("Bsearch I : ");
- ll L = 1 , R = 1e9;
- while(L <= R){
- ll m = (L+R)/2;
- // printf("%lld ",m);
- ll a = m - 1 , b = m , c = m + 1;
- ll sa = 0 , sb = 0 , sc = 0;
- for(int i = 0 ; i < n ; i ++){
- sa += abs(a - d[i].I)*d[i].s;
- sb += abs(b - d[i].I)*d[i].s;
- sc += abs(c - d[i].I)*d[i].s;
- }
- if(sa >= sb && sb <= sc){
- posI = m;
- sumI = sb;
- break;
- }
- else if(sa > sb && sb > sc){
- L = m + 1;
- }
- else if(sa < sb && sb < sc){
- R = m - 1;
- }
- else{
- // printf("Error %lld %lld %lld <- %lld\n",sa,sb,sc,m);
- return -1;
- }
- }
- //J
- L = 1 , R = 1e9;
- // printf("\nBsearch J : ");
- while(L <= R){
- ll m = (L+R)/2;
- // printf("%lld ",m);
- ll a = m - 1 , b = m , c = m + 1;
- ll sa = 0 , sb = 0 , sc = 0;
- for(int i = 0 ; i < n ; i ++){
- sa += abs(a - d[i].J)*d[i].s;
- sb += abs(b - d[i].J)*d[i].s;
- sc += abs(c - d[i].J)*d[i].s;
- }
- if(sa >= sb && sb <= sc){
- posJ = m;
- sumJ = sb;
- break;
- }
- else if(sa > sb && sb > sc){
- L = m + 1;
- }
- else if(sa < sb && sb < sc){
- R = m - 1;
- }
- else{
- // printf("Error %lld %lld %lld <- %lld\n",sa,sb,sc,m);
- return -1;
- }
- }
- printf("%lld",sumI+sumJ);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement