# Aiuto per Problem Setting (ois\_problemsetting) errore ouput

**URL:** <https://forum.olinfo.it/t/aiuto-per-problem-setting-ois-problemsetting-errore-ouput/9767>\
**Category:** Aiuto\
**Created:** [11 Novembre 2025, 10:03pm UTC](https://forum.olinfo.it/t/aiuto-per-problem-setting-ois-problemsetting-errore-ouput/9767 "2025-11-11T22:03:58Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sansi](https://forum.olinfo.it/user_avatar/forum.olinfo.it/sansi/32/3232_2.png) [@Sansi](https://forum.olinfo.it/u/Sansi)\
**Post date:** [11 Novembre 2025, 10:03pm UTC](https://forum.olinfo.it/t/aiuto-per-problem-setting-ois-problemsetting-errore-ouput/9767/1 "2025-11-11T22:03:58Z")

</div>

Buonasera, ho bisogno di un aiuto per il problema problemsetting.  
nel mio codice cerco di implementare una ricerca binaria dove vado a trovare il piu grande valore che soddisfi la condizione, tuttavia ottengo solo 60/ 100 per errore output. vi lascio qua il il link al problema e il codice, grazie.  
([Training - Problem Setting](https://training.olinfo.it/task/ois_problemsetting)).

```
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

bool solve(vector<ll>A, vector<ll>B, int N, ll x){

	for(int i = 0; i < N - 1; i++){
		for(int j = 0; j < 2; j++){
			ll togli = 0;
			if(A[i + j] < x){
				togli = x - A[i + j];
			}
			togli = min(togli, B[i]);
			A[i + j] += togli;
			B[i] -= togli;
		}
	}

	for(int i = 0; i < N; i++){
		if(A[i] < x) return false;
	}
	return true;
}
ll upBd(vector<ll>&A, vector<ll>&B, int N, int x){
	ll l = 0, r = x;
	while(l < r){
		ll mid = (l + r) / 2;
		
		if(solve(A, B, N, mid)){
			l = mid + 1;
		}else{
			r = mid;
		}
	}
	return l;
}

int main() {
    // uncomment the two following lines if you want to read/write from files
    // ifstream cin("input.txt");
    // ofstream cout("output.txt");

    int T;
    cin >> T;
    for (int test = 1; test <= T; ++test) {
        int N;
        cin >> N;

        vector<ll> A(N);
        ll p = 0;
        for (int i = 0; i < N; ++i){
            cin >> A[i];
		}

        vector<ll> B(N - 1);
        for (int i = 0; i < N - 1; ++i){
            cin >> B[i];
		}
		for(int i = 0; i < N; i++){
			int cB = 0;
			if(i == 0) cB = B[0];
			else if(i == N - 1) cB = B[N - 2];
			else cB = B[i] + B[i + 1];
			p = max(p, A[i] + B[i]);
		}
	
        ll K = upBd(A, B, N, p);
        K = max(K - 1, 0LL);

        // INSERT YOUR CODE HERE

        cout << K<< endl;
    }

    return 0;
}

```

---

<div class="post-metadata">

**Author:** ![nicholasbamber](https://forum.olinfo.it/user_avatar/forum.olinfo.it/nicholasbamber/32/2629_2.png) [@nicholasbamber](https://forum.olinfo.it/u/nicholasbamber)\
**Post date:** [15 Novembre 2025, 7:34am UTC](https://forum.olinfo.it/t/aiuto-per-problem-setting-ois-problemsetting-errore-ouput/9767/2 "2025-11-15T07:34:37Z")

</div>

Ciao! Ho notato due problemi con il tuo codice.

1. Nella riga 65: `p = max(p, A[i] + B[i]);`. Penso che volevi scrivere `A[i] + cB`, invece che `A[i] + B[i]`.
2. Sembra che tu stia scegliendo come limite destro \max A\_i + cB, tuttavia lo stai usando come bordo escluso. E’ possibile che la risposta sia \max A\_i + cB, in questo caso troveresti come risposta \max A\_i + cB - 1. Penso che inizializzare r a x + 1 possa risolvere il problema.

Un esempio che sbaglia il tuo codice e’:

```auto
1
2
1 1
0

```

Chiaramente la risposta e’ 1, ma il tuo codice stampa 0.  
\max A\_i + cB = 1 + 0 = 1, quindi stai cercando una risposta solo nel range [0, 0].

---

<div class="post-metadata">

**Author:** ![Sansi](https://forum.olinfo.it/user_avatar/forum.olinfo.it/sansi/32/3232_2.png) [@Sansi](https://forum.olinfo.it/u/Sansi)\
**Post date:** [15 Novembre 2025, 3:11pm UTC](https://forum.olinfo.it/t/aiuto-per-problem-setting-ois-problemsetting-errore-ouput/9767/3 "2025-11-15T15:11:40Z")

</div>

ti ringrazio, ora è tutto apposto
