Rifornimento ai distributori

Aiuto nel codice ho 0/100

#include <math.h>
#include <fstream>
using namespace std;
int rifornisci(int N,int M,int K,int D[]);
 int main() {
int a,b,c;
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
cin>>a>>b>>c;
int D[a];
for (int i=0; i<a; i++)
{	cin>>D[i]; }
cout<<rifornisci(a,b,c,D);
return (0);
}
int rifornisci(int N,int M,int K,int D[]){
	int inizio=0; 
	int fermate =0; //int d=D[0];
	//if (d>M) fermate++;
	for (int i=0; i<N-1; i++)
		{   if (D[i+1]>inizio+M){
	 	inizio=D[i-1]; fermate++;
	 		 }   
		if (inizio+M<K) fermate++;
		return fermate;
	}
}
 

Dando una rapida occhiata il problema potrebbe essere dato da

Infatti se il carburante non basta per arrivare ad i+1 allora mi fermo a i non a i-1

Piccolo consiglio, quando devi dichiarare deglia array/matrici è “buona norma” utilizzare una costante come dimensione , ti consiglio di fare:

using namespace std; 
int const MAXN=100000;
int main ()
{
    int D[MAXN] ;

}

E poi utilizzare solo le celle necessarie in quel task.

Sottoponendo il tuo codice modificato dal cellulare ottengo ancora 0/100, al momento non riesco a provare nuovamente il tuo codice , quello che ti consiglio è : se ti imbatti in un errore cerca di debuggare in locale (magari stampando a video le varie variabili) in locale e trovare l’errore, metodologia che risulta necessaria, molto spesso in gara

Ok trovato l’errore, hai sbagliato ad inserire le parentesi graffe, sostituisci il ciclo for con questo codice:

for (int i=0; i<N-1; i++)
	 if (D[i+1]>inizio+M && D [i] <=inizio+M){
	 	inizio=D[i];
	 	fermate++;
	 		 }   
		if (inizio+M<K) fermate++;
		return fermate;
1 Mi Piace

GRAZIE:wink::wink::heavy_heart_exclamation: