# Problema grattacieli

**URL:** <https://forum.olinfo.it/t/problema-grattacieli/6413>\
**Category:** Olimpiadi\
**Created:** [5 Novembre 2020, 11:51am UTC](https://forum.olinfo.it/t/problema-grattacieli/6413 "2020-11-05T11:51:56Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![imBenjamin741](https://forum.olinfo.it/user_avatar/forum.olinfo.it/imbenjamin741/32/739_2.png) [@imBenjamin741](https://forum.olinfo.it/u/imBenjamin741)\
**Post date:** [5 Novembre 2020, 11:51am UTC](https://forum.olinfo.it/t/problema-grattacieli/6413/1 "2020-11-05T11:51:56Z")

</div>

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:

```auto
#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;
}

```

---

<div class="post-metadata">

**Author:** ![zJack1342](https://forum.olinfo.it/user_avatar/forum.olinfo.it/zjack1342/32/711_2.png) [@zJack1342](https://forum.olinfo.it/u/zJack1342)\
**Post date:** [5 Novembre 2020, 12:26pm UTC](https://forum.olinfo.it/t/problema-grattacieli/6413/2 "2020-11-05T12:26:30Z")

</div>

Nei problemi in cui è richiesto il grader devi sviluppare le funzione richieste (ed eventualmente funzioni accessorie). Non c’è bisogno di includere il main.

> [@Funzionamento grader](https://forum.olinfo.it/t/funzionamento-grader/3838/6):
>
> chi mi spiega bene come si eseguono in locale grader e funzione creata per fare i test? come si richiama quest'ultima? gianpiero96 Supponendo che tu utilizzi C o C++, l'idea è che devi lavorare con due file anziché uno, e uno di questo due (il grader) non lo devi (o meglio "non lo dovresti") modificare. Per esempio, se un problema ti chiede di implementare una funzione "somma", avrai una situazione di questo tipo: grader.c&nbsp;(ha la funzione main e dichiara un [prototipo](https://en.wikipedia.org/wiki/Function_prototype) della funzione che de…

---

<div class="post-metadata">

**Author:** ![imBenjamin741](https://forum.olinfo.it/user_avatar/forum.olinfo.it/imbenjamin741/32/739_2.png) [@imBenjamin741](https://forum.olinfo.it/u/imBenjamin741)\
**Post date:** [5 Novembre 2020, 12:29pm UTC](https://forum.olinfo.it/t/problema-grattacieli/6413/3 "2020-11-05T12:29:28Z")

</div>

Non avevo capito questa cosa del grader infatti. Ora è tutto più chiaro, grazie mille 🙂
