Advertisement
Guest User

12321 - Gas Stations

a guest
Sep 21st, 2019
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. //12321 - Gas Stations
  2. #include <iostream>
  3. #include <algorithm>
  4. #define MAX_G 10010
  5. using namespace std;
  6.  
  7. int L, G, a, b;
  8. struct range{
  9.     int x, y;
  10.  
  11.     range(int _x, int _y) { x = _x;
  12.         y = _y;
  13.     }
  14.  
  15.     range(){}
  16. };
  17.  
  18. bool cmp (const range& left, const range& right){
  19.     if (left.x == right.x) return left.y > right.y;
  20.     return left.x < right.x;
  21. }
  22.  
  23. range ranges[MAX_G];
  24.  
  25. int main(){
  26.     cin >> L >> G;
  27.     do{
  28.         for (int i = 0; i < G; ++i){
  29.             cin >> a >> b;
  30.             ranges[i].x = a - b;
  31.             ranges[i].y = a + b;
  32.         }
  33.  
  34.         sort(ranges, ranges + G, cmp);
  35.  
  36.         int maxLen = 0;
  37.         int newMaxLen = 0;
  38.         int deleted = 0;
  39.         for (int i = 0; i < G; ++i) {
  40.             while(ranges[i].x <= maxLen && i < G){
  41.                 //cout << "try " << ranges[i].x << " - " << ranges[i].y << '\n';
  42.                 newMaxLen = max(newMaxLen, ranges[i].y);
  43.                 ++i;
  44.             }
  45.  
  46.             deleted++;
  47.  
  48.             if (newMaxLen >= L) break;
  49.  
  50.             if (newMaxLen == maxLen && maxLen < L) {
  51.                 // no solution
  52.                 //cout << "maxLen: " << maxLen << '\n';
  53.                 deleted = -1;
  54.                 break;
  55.             } else
  56.                 --i;
  57.  
  58.             //cout << "found\n";
  59.  
  60.             maxLen = newMaxLen;
  61.            
  62.         }
  63.  
  64.         if (deleted == -1 || newMaxLen < L) cout << "-1\n";
  65.         else
  66.         cout << G - deleted << '\n';
  67.  
  68.         cin >> L >> G;
  69.     } while (L > 0);
  70.  
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement