Save The Barrels(butoaie) 0/100

Sto provando a risolvere il problema butoaie e, fino ad ora, sono arrivato ad una soluzione in cui:

  • Uso la ricerca binaria per trovare una possibile soluzione
  • Calcolo per ogni stanza quanti insetticidi potenti ho bisogno
  • Se in quella stanza il numero di insetticidi potenti di cui ho bisogno supera la quantità di giorni trovata con la ricerca binaria, esco automaticamente essendo una soluzione impossibile da risolvere
  • Altrimenti, se la quantita di insetticidi potenti necessaria è maggiore di nPotenti * giorno, allora guardo a destra, altrimenti a sinistra.

Questo è il codice:

#include <bits/stdc++.h>

using namespace std;

int main() {
	int N, K, P, Q;
	cin >> N >> K >> P >> Q;
	vector<int> stanze(N);
	for (int i = 0; i < N; i++) {
		cin >> stanze[i];
	}

	int nPotenti = N - K;
	int nScarsi = K;
	int potenti = Q;
	int scarsi = P;
	if (scarsi > potenti) {
		swap(potenti, scarsi);
		swap(nScarsi, nPotenti);
	}

	int left = 0;
	int right = 1e7;
	while (left <= right) {
		int mid = (left + right) / 2;
		int needed = 0;
		for (int i = 0; i < N; i++) {
			if (stanze[i] <= scarsi * mid) continue;

			int duh = (stanze[i] - (scarsi * mid) + potenti - scarsi - 1) / (potenti - scarsi);
			if (duh > mid) {
				needed += nPotenti * mid + 1;
				break;
			}
			needed += duh;
		}
		if (needed <= nPotenti * mid) {
			right = mid - 1;
		} else {
			left = mid + 1;
		}
	}
	cout << right + 1 << '\n';
}

Ciao, devi solo utilizzare long long nella bs e aumentare il limite superiore.

ho cambiato tutti gli int in long long e alzato il limite massimo a 1e18, ma ancora mi esce 0/100…

ho utilizzato 1e9.

utilizzando 1e9 fa 80/100, sbagliando i primi 4 del subtask 2 :pensive:. Credo che ci sia qualche problema con la mia ricerca binaria.

Si. Nell’ultimo if ho cambiato da < a <= e ora fa 100/100. Grazie mille