# Confusion about problem 'Save The Barrels'

**URL:** <https://forum.olinfo.it/t/confusion-about-problem-save-the-barrels/8780>\
**Category:** Aiuto\
**Created:** [5 Marzo 2024, 3:27am UTC](https://forum.olinfo.it/t/confusion-about-problem-save-the-barrels/8780 "2024-03-05T03:27:51Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![bengbengtiao](https://forum.olinfo.it/user_avatar/forum.olinfo.it/bengbengtiao/32/2725_2.png) [@bengbengtiao](https://forum.olinfo.it/u/bengbengtiao)\
**Post date:** [5 Marzo 2024, 3:27am UTC](https://forum.olinfo.it/t/confusion-about-problem-save-the-barrels/8780/1 "2024-03-05T03:27:51Z")

</div>

Below is my solution for problem [CMSocial - a social coding app](https://training.olinfo.it/#/task/ois_butoaie/statement). I finally got 100/100 after guessing. But I have a question.  
It is about how exactly that we can use diffuser of the same kind in one room. There are two strategies:  
A. We can use multiple diffusers of the same kind in one room in a day,  
B. We can only use 1 diffuser per room per day.  
I thought it is always strategy B based on the description, my original solution can only give me 20/100.

The current solution seems quite contradictory to me(since I guessed the solution) 🙂

In method f, m is the max value, which means we are following strategy B.  
But in the meantime, we check d \* k \>= r, which means we are following strategy A.

An example,  
P = 1, Q = 0, K = 2  
bugs = [2, 4, 4]

Using strategy A, it is (4 + 4 + 2) / 2 = 5 days.  
Using strategy B, it is 6 days.

Is my thinking process wrong?

```c++
#include <bits/stdc++.h>
using ll = long long;
ll ceil(ll a, ll b) {
    return (a + b - 1) / b;
}
bool f(std::vector<ll> &v, ll n, ll p, ll q, ll k, ll d) {
    ll r = 0;
    ll m = 0;
    for (ll i = 0; i < n; ++i) {
        if (v[i] - d * q <= 0) continue;
        ll t = ceil(v[i] - d * q, p);
        r += t;
        m = std::max(m, t);
    }

    return std::max(m, k == 0 ? d + r : ceil(r, k)) <= d;
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);

    ll n, k;
    std::cin >> n >> k;
    ll p, q;
    std::cin >> p >> q;
    std::vector<ll> v(n);
    for (ll i = 0; i < n; ++i) std::cin >> v[i];

    if (q > p) {
        std::swap(p, q);
        k = n - k;
    }

    p -= q;

    ll l = 0, r = (ll)1e9;
    while (r - l > 1) {
        ll m = l + (r - l) / 2;
        if (f(v, n, p, q, k, m)) r = m;
        else l = m;
    }
    std::cout << r << "\n";
    return 0;
}

```
