Ho scritto il programma grattacieli che era presente nelle precedenti olimpiadi di informatica ma quando lo vado ad inserire nelle sottoposizioni mi restituisce: compilazione fallita.
Nel mio compilatore Dev C++ il programma funziona senza problemi e volevo sapere il motivo dell’errore. Grazie in anticipo.
Vi scrivo il codice qui sotto:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
long long costruisci(int N, int M, long long* H, int* A, int* B, int* C);
int main() {
FILE *input,*output;
size_t i,j;
input=fopen("input.txt", "r");
output=fopen("output.txt", "w");
int n, m;
fscanf(input,"%d %d", &n, &m);
long long* h = malloc(sizeof(long long) * n);
for(i = 0; i < n; i++) {
fscanf(input,"%d", &h[i]);
}
int* a = malloc(sizeof(int) * m);
int* b = malloc(sizeof(int) * m);
int* c = malloc(sizeof(int) * m);
assert(a && b && c);
for(j = 0; j < m; j++) {
fscanf(input,"%d %d %d", &a[j], &b[j], &c[j]);
}
fprintf(output, "%lld\n", costruisci(n, m, h, a, b, c));
free(c);
free(b);
free(a);
free(h);
return 0;
}
long long costruisci(int N, int M, long long* H, int* A, int* B, int* C) {
const int Nc=N;
int i,j,k,flag=0,flag2,tot=0;
long long hm[Nc];
for(i=0; i<N; i++){
hm[i]=0;
}
do{
flag=0;
for(i=0; i<N; i++){
if(hm[i]<H[i]){
flag2=0;
for(j=0; j<M; j++){
if(B[j]==i){
k=A[j];
if(hm[i]+1<=hm[k]+C[j]){
flag2++;
}
}
else{
flag2++;
}
}
if(flag2==M){
hm[i]++;
}
else{
flag++;
}
}
else{
flag++;
}
}
}while(flag<N);
for(i=0; i<N; i++){
tot=tot+hm[i];
}
return tot;
}