DEV Community

Anurag Pandey
Anurag Pandey

Posted on

Day 9: Uping the problem rating

Disclaimer:

I am a beginner in competitive programming, and this is me documenting my learnings. So, anything I say is just what I think at the moment and should not be taken as hard truths.

Problem 1: Taxi

using vi = vector<int>;

#define all(x) begin(x), end(x)
#define forn(i, n) for(int i = 0; i < n; i++)

main() {
  int n;
  cin >> n;
  vi v(5, 0);
  forn(_, n) {
    int g;
    cin >> g;
    v[g]++;
  }
  // every four will require one car
  int four = v[4]; 
  // every three will require one car
  int three = v[3];
  // it can take groups of one too
  v[1] -= min(v[1], v[3]);
  // a car can take two groups of two and change
  int two = v[2]/2 + v[2]%2;
  int rem = v[2]%2;
  v[1] -= min(v[1], rem*2);
  int one = v[1]/4 + (v[1]%4 != 0);

  int ans = one + two + three + four;
  cout << ans;
}
Enter fullscreen mode Exit fullscreen mode

The above solution was the first accepted solution I could come up with.

This one is more cleaner [Greedy Approach]

using vi = vector<int>;

#define forn(i, n) for(int i = 0; i < n; i++)
#define all(v) begin(v), end(v)
#define endl '\n'

main() {
  int n;
  cin >> n;
  vi v(n);
  for(auto& e: v) cin >> e;
  sort(all(v));
  int i = 0, j = n-1;
  int ans = 0;
  while(i <= j) {
    int curr = v[j];
    while(i < j && curr+v[i] <= 4) {
      curr += v[i++];
    }
    j--;
    ans++;
  }
  cout << ans;
}
Enter fullscreen mode Exit fullscreen mode

Problem 2: Interesting Drink

I was initially afraid to solve the problem seeing dp in the tags. But then I hid the tags, and went for the
problem. lol.

Just check the number of places whose booze price is less than or equal to the price the man can pay.
Binary Search.

using vi = vector<int>;

#define forn(i, n) for(int i = 0; i < n; i++)
#define all(v) begin(v), end(v)
#define endl '\n'

main() {
  int n;
  cin >> n;
  vi v(n);
  for(auto& e: v) cin >> e;
  sort(all(v));
  int q;
  cin >> q;
  forn(_, q) {
    int p;
    cin >> p;
    auto it = upper_bound(all(v), p);
    cout << distance(begin(v), it) << endl;
  }
}
Enter fullscreen mode Exit fullscreen mode

Algorithm

We didn't learn any new algorithm today.

Discussion (0)