Ricarica 40/100 output errato

Ciao a tutti, stavo provando a risolvere ricarica ( Allenamento Olimpiadi Italiane di Informatica (olinfo.it) ) e ho trovato una soluzione ma mi dà solo 40/100 (ho guardato gli altri post sul forum ma hanno svolto il problema in modo diverso, quindi non so cosa io stia sbagliando):

#include <vector> #include <iostream> #include <climits> #define MAXN 100000 
using namespace std;

int ricarica(int N, int M, int A[], int B[]) {
 	int charge=0, min=INT_MAX, used;
 	for(int i=0; i<N; i++)
 	{
	 	int plus=B[i]-A[i]+1;
	 	if(i==N-1)
	 		used=M-B[N-1];
	 	else
			used=A[i+1]-B[i]-1;
	 	//cout<<charge<<"  "<<plus<<"  "<<used<<endl;
 		charge+=plus;
 		charge-=used;
		
		if(charge<=0)
		{
			min=std::min(charge, min);
		}
	}
	min-=(A[0]-1);	//add charge for the first minutes
	min*=-1; min++; 	//add 1 because the phone battery cannot go under 1 
        //(previously we've calculated as if the battery could go to 0)
	return min;
}
int A[MAXN], B[MAXN];
int main() {
    int N, M, i;
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
    cin>>N>>M;    for(i=0; i<N; i++)        cin>>A[i]>>B[i];    
    cout<<ricarica(N, M, A, B);
    return 0;
}

In pratica a ogni intervallo (che va da A[i] a A[i+1], quindi comprende una ricarica e un’uso del telefono) calcolo:

  1. plus (quanta energia aumenta), used (quanta ne spreca) e charge (la carica totale dopo aver aggiunto plus e sottratto used.
  2. Controllo se charge è sotto lo 0 (x ora controllo quando arriva a 0, la parte di non scendere sotto l’1% faccio dopo) in quel caso controllo se charge è minore di min e prendo il minimo (in pratica trovo la carica minima a cui arriva charge).
    Successivamente:
  3. Aggiungo la carica necessaria per l’intervallo (0-A[0]) che quindi permette di arrivare alla prima stazione di ricarica.
  4. faccio diventare min positivo e aggiungo 1 (x il problema di non scendere mai sotto l’1%).
    Però questa soluzione dà solo 40/100, avete suggerimenti? Grazie mille in anticipo.
    Qui sotto allego lo screen della sottoposizione.

Prova con
1 4
4 4

Ok, vedrò di trovare l’errore, grazie mille!

Per chi volesse saperlo:

soluzione

ho risolto modificando il valore iniziale di min (da INT_MAX a 1-A[0], che è il valore che la batteria iniziale deve avere per poter arrivare senza morire alla prima ricarica).
Inoltre ho aggiunto un controllo alla fine che controlla se min non è più uguale a 1-A[0] (min è stato modificato), allora ci sommo la carica iniziale (che è stata tolta nel for quando si fa min=min(charge, min):
if(min!=1-A[0]) min-=(A[0]-1);

Comunque grazie mille per avermi aiutato! :slight_smile: