Advertisement
tepyotin2

Untitled

Jul 8th, 2023
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. bool isDiag = false;
  5.  
  6. vector<pair<int, int>> listV;
  7. int main(){
  8.     //isDiag = true;
  9.     freopen(  "trapped.in", "r", stdin);
  10.    
  11.    
  12.     int ans = 0;   
  13.     int N ;
  14.     cin >> N  ;
  15.     int va, p;
  16.     for (int i = 0; i < N; i++)
  17.     {
  18.         cin >> va >> p;
  19.         listV.push_back({p, va});
  20.     }
  21.    
  22.     sort(listV.begin(), listV.end());
  23.     for (int i = 0; i < N -1; i++)
  24.     {
  25.         int area = listV[i+1].first  - listV[i].first ;
  26.         if(isDiag) cout << "i: " << i << ", pos: " << listV[i].first << "-" <<  listV[i+1].first << ", area: " << area;
  27.         int left = i ;
  28.         int right = i+1;
  29.         int dist ;
  30.         while (left >= 0 && right <= N-1)
  31.         {
  32.             bool broke = false;
  33.             dist = listV[right].first - listV[left].first;
  34.             if (dist > listV[left].second)
  35.             {
  36.                 left--; //broke left skip to next one;
  37.                 broke = true;
  38.             }
  39.             if (dist > listV[right].second)
  40.             {
  41.                 right++; //broke right skip to next none;
  42.                 broke = true;
  43.             }
  44.             if (!broke)
  45.             {
  46.                 //area that
  47.                 break;
  48.             }
  49.         }
  50.         bool broken = true;
  51.         if (left >= 0 && right <= N-1)
  52.         {
  53.             //couldn't  break out
  54.             ans += area;
  55.             broken = false;
  56.         }
  57.         if(isDiag) cout << ", broken: " << broken << ", left: " << left << ", right: " << right<< ", largest dist: " << dist << ", ans: " << ans << endl;
  58.     }
  59.    
  60.    
  61.    
  62.     if(!isDiag) freopen("trapped.out", "w", stdout);
  63.     cout << ans << endl;
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement