Alex_tz307

USACO 2017 December Contest, Silver Problem 2. Milk Measurement

Dec 1st, 2020 (edited)
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. // http://www.usaco.org/index.php?page=viewproblem2&cpid=763
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("measurement.in");
  7. ofstream fout("measurement.out");
  8.  
  9. class event {
  10.     public:
  11.         int day, id, delta;
  12.  
  13.         bool operator < (const event &A) const {
  14.             return day < A.day;
  15.         }
  16. };
  17.  
  18. int main() {
  19.     int N, G;
  20.     fin >> N >> G;
  21.     vector <event> a;
  22.     for(int i = 0; i < N; ++i) {
  23.         int day, id;
  24.         string s;
  25.         fin >> day >> id >> s;
  26.         int val = 0, semn = 1;
  27.         if(s[0] == '-')
  28.             semn = -1;
  29.         for(int i = 1; i < static_cast<int>(s.size()); ++i)
  30.             val = val * 10  + (s[i] - '0');
  31.         val *= semn;
  32.         a.push_back(event{day, id, val});
  33.     }
  34.     sort(a.begin(), a.end());
  35.     map <int,int,greater<int>> cnt;
  36.     map <int,int> M;
  37.     int sol = 0;
  38.     for(int i = 0; i < N; ++i) {
  39.         int id = a[i].id,
  40.             delta = a[i].delta,
  41.             &curr = M[id];
  42.         bool was_top = curr == cnt.begin()->first;
  43.         int was_cnt = cnt[curr]--;
  44.         if(was_cnt == 1)
  45.             cnt.erase(curr);
  46.         curr += delta;
  47.         int is_cnt = ++cnt[curr];
  48.         bool is_top = curr == cnt.begin()->first;
  49.         if(was_top) {
  50.             if(!is_top || was_cnt != 1 || is_cnt != 1)
  51.                 ++sol;
  52.         }
  53.         else
  54.             if(is_top)
  55.                 ++sol;
  56.     }
  57.     fout << sol;
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment