Grattacieli 65/100

Scusatemi se vi disturbo ancora oggi, ma è da ormai 1 giorno che sto questo esercizio e non ne vengo a capo…
Il programma dà errore sui subtask 3, 4 e 8. Comunque sul 4 e l’8 qualche testcase è corretto.
Gli errori sono misti tra timeout e output sbagliato, ma non riesco proprio a capire dove sia l’errore. Vi mando il grader:

long long costruisci(int N, int M, long long* H, int* A, int* B, int* C) {
    int i,flag=0,tot=0; 
    do{
	  	flag=0;
    	for(i=0; i<M; i++){
    		while(H[B[i]]>H[A[i]]+C[i]){
    			H[B[i]]=H[B[i]]-(H[B[i]]-(H[A[i]]+C[i]));
    			flag=1;
			}
		}
	}while(flag!=0);
		
		
    for(i=0; i<N; i++){
    	tot=tot+H[i];
	}
    return tot;
}

potresti spiegare cosa farebbe il tuo codice?
So perché il tuo codice va in timeout, ma ancora non visto perché ti dovrebbe dare risultati sbagliati.
comunque quando invii codice usa
` 3 volte all’inizio e alla fine così che rimanga identato

tot deve essere long long altrimenti va in overflow.

1 Mi Piace

ah già ahah. Non avevo visto

si perfetto, ora mi da solo l’errore timed out. Comunque perchè dovrebbe andare in overflow? Sarebbe troppo piccolo tot se dichiarato int?

si semplicemente (messaggio deve essere minimo una tot lunghezza)

1 Mi Piace

ok, per il timeout quale potrebbe essere il problema?

semplicemente hai algoritmo con una complessità troppo elevata.
Dovresti pensare ad un altro modo in cui il problema possa essere rappresentato.

Ogni grattacielo ha una relazione con un altro tramite una condizione. Pensa dunque come poui rappresentare queste relazioni

Sono sicuro che il problema non sia di complessità. Alcuni test li risolve molto rapidamente e in alcuni va in time out.image

si è complessità.
Essendo esponenziale, come cresce la grandezza dell’input quanto aumenta in modo esponenziale le operazioni che fai

è vero non ci avevo pensato, scusami. Eppure mi sembrava il modo più semplice per risolverlo. Andrò fuori di testa per questo programma ahahhahah
Non esiste un modo per scaricare i testcase così da provarli in locale?

si, puoi farlo in 2 modi:
1.nella sezione allegati puoi scaricare il grader, e incollare la tua funzione li (ma dovrai soltanto sottomettere il tuo codice con a funzione etc etc)
2. crearti te un main dove leggi input nello stesso modo e passi come parametri i relativi (stesso metodo di sottomissione)

Il main già me l’ero fatto però non ho gli input da dargli. Negli allegati ce ne sono 3 tutti molto semplici e se il problema è il timeout sicuramente non aiutano. Io intendevo se c’era un modo per scaricare gli input dei testcase, così da capire meglio il problema del programma. Comunque grazie mille per il tempo che mi stai dedicando

ah no, non è possibile scaricare nessun tipo di input dalle sottomissioni

piuttosto al momento pensa a ciò che ti ho detto prima ( riguardo a come potessi vedere il problema )

Diciamo che la logica del mio programma è prendere per ipotesi che tutti i grattacieli siano alla massima altezza consentita. Poi faccio dei controlli e diminuisco i grattacieli che non soddisfano i requisiti fino a quando tutti i vincoli non sono stati rispettati.

hm… non credo sia ottimale.
Pensa a come potresti gestite questa rete di relazioni

ok mi ci metto, grazie ancora :slight_smile:

come prosegue?
/il messaggio deve esse lungo almeno 20 caratteri/

Sinceramente ci ho rinunciato dato che già ci ho perso molto tempo. Non ho idea di quale sia la soluzione ahahaha. Sto comunque facendo altri programmi sempre per allenarmi in vista delle nazionali