Quando carico il mio programma per testarlo, non funziona mai

Buongiorno,
ho provato alcuni esercizi, ma quando carico il programma e lo verifico, mi restituisce sempre 0 punti su 100. Ho provato diversi esercizi, anche i più semplici, che funzionano con gli esempi e con altri input creati da me; eppure, quando carico, mi dà sempre 0 punti. Sto sbagliando il programma? Alle territoriali verrà controllato solo il file output, giusto? Ecco due esempi:
“Late for work”

    #include <iostream>
    #include <stdio.h>
    #include <assert.h>

    // constraints

       // input data
       int H0 = 0;
       int M0 = 0; 
       int H1 = 0;
    int M1 = 0;
    int HF = 0;
    int MF = 0;

    using namespace std;

    int main() {
    //  uncomment the following lines if you want to read/write from files
      //freopen("input.txt", "r", stdin);
      //freopen("output.txt", "w", stdout);

    assert(4 == scanf("%d%d%d%d", &H0, &M0, &H1, &M1));

    if(H0>H1) {
    	HF = (24-H0) + H1;
    	} else {
    		HF = H1 - H0;
    	}
    	if(M0>M1) {
    		MF = (60-M0) + M1;
    		HF = HF - 1;
    	} else {
    		MF = M1 - M0;
    	}
    printf("%d\n", 42); // print the result
    return 0;
    }

“A Tantrum With Consequences”

    #include<iostream>

    using namespace std;

    int main() {
    	freopen("input2.txt", "r", stdin);
    	freopen("output20.txt", "w", stdout);
    	int P; //planes
    	
    	int check = 0; //did we drop a bomb?
    	int j = 0; //position of house to check if to bomb
    	int k = 0; //pos for burn queue
    	int N; //number of houses
    	int burn = 0; //number of burned houses
    	cin >> N;
    	cin >> P;
    	int tb[N]; // houses to burn at end of raid
    	int H[N]; //height of house i
    	for(int i = 0; i < N; i++) {
    		cin >> H[i];
    		tb[i] = H[i];
    		//cout << tb[i] << endl;
    	}
    	for(int i = 0; i < P; i++) {
    		for(j = 0; j < N; j++) {
    			if(j <= 0) {
    				if(H[j+1] < H[j]) {
    					tb[j] = 0;
    					burn = burn + 1;
    				}
    			} else if (j >= N-1) {
    				if(H[j-1] < H[j]) {
    					tb[j] = 0;
    					burn = burn + 1;
    				}
    			} else if (0<j<N-1) {
    				if(H[j-1] < H[j] && H[j+1] < H[j]) {
    					tb[j] = 0;
    					burn = burn + 1;
    				}
    			}
    		}
    		for(int f = 0; f < N; f++) {
    			H[f] = tb[f];
    		}
    	}
    	cout << burn;
    	return 0;
    }

Piccolo consiglio: formatta il codice in maniera opportuna, e’ quasi illeggibile (per formattazione intendo: tutti gli spazi ed i tab vanno messi bene, le parentesi graffe devono seguire un certo ordine etc…)

Comunque: a prima vista, nella soluzione di late for work hai un printf("%d\n", 42); // print the result alla fine, il che vorrebbe dire che alla fine l’output sara’ sempre 42 (non hai messo il tuo di risultato)

Il problema “tantrum with consequences” ti fa 35/100, il problema e’ che per aprire i file hai messo: freopen("input2.txt", "r", stdin); e freopen("output20.txt", "w", stdout);, invece dovrebbe essere freopen("input.txt", "r", stdin); e freopen("output.txt", "w", stdout);, quei numeri vanno levati.

Un altro problema del tuo codice, che si nota nella soluzioe di “tantrum with consequences” e’ questo:
int P; //planes oppure int burn = 0; //number of burned houses. Fidati, e’ di gran lunga meglio chiamare quelle variabili int planes_count e int burned_houses piuttosto che abbreviare il nome e scrivere il commento accanto. I commenti servono fino ad un certo limite, il codice deve essere leggibile e chiaro senza commenti: nel mio caso, preferisco non abbreviare MAI le variabili, anche se lunghe (preferisco usare index piuttosto che i o idx in un for). (Provo a tenermi breve sull’argomento per non allungare la risposta, pero’ se hai domande a riguardo, saro’ felice di risponderti).

Ho usato i tuoi suggerimenti ma non cambia niente: 35 punti su Tantrum with Consequences e 0 su Late for Work. Grazie per i suggerimenti, io preferisco mettere le parentesi graffe così:

int main() {
    for(int index = 0; index < n; index++) {
        //example
    }
}

Salve, per late for work devi stampare sia le ore che i minuti per cui il tuo codice diventa:

#include <iostream>
#include <stdio.h>
#include <assert.h>

// constraints

   // input data
   int H0 = 0;
   int M0 = 0; 
   int H1 = 0;
int M1 = 0;
int HF = 0;
int MF = 0;

using namespace std;

int main() {

assert(4 == scanf("%d%d%d%d", &H0, &M0, &H1, &M1));

if(H0>H1) {
	HF = (24-H0) + H1;
	} else {
		HF = H1 - H0;
	}
	if(M0>M1) {
		MF = (60-M0) + M1;
		HF = HF - 1;
	} else {
		MF = M1 - M0;
	}
printf("%d %d\n", HF, MF); // print the result
return 0;
}

Mentre per raid devi trovare una soluzione più veloce di O(N * P). Se clicchi sul id della sub puoi vedere l’esito della tua soluzione.