#include #include #include #define LIBERO 0 #define OCCUPATO 1 int main(int argc, char *argv[]) { FILE *f; char filename[30] = "impegni.txt"; int inf, sup, i, lungh; int calendario[1000+1]; for (i = 0; i <= 1000; i++) calendario[i] = LIBERO; f = fopen(filename, "rt"); if (f == NULL) { printf("ERRORE: problema apertura in lettura (%s)\n", filename); return -1; } int FINE = 0; while (!feof(f)) { FINE = (fscanf(f, "%d %d", &inf, &sup) != 2); if (!FINE && !feof(f)) { /*printf("%d %d\n", inf, sup);*/ for (i = inf; i <= sup; i++) calendario[i] = OCCUPATO; } } fclose(f); /* cerca la sequenza di giorni contigui piu' lunga */ lungh = 0; /* lunghezza massima corrente*/ int stato; int cont = 0; int l_inf, l_sup; stato = OCCUPATO; for (i = 1; i <= 1000; i++) { if (calendario[i] == OCCUPATO && stato == LIBERO) { /* ho raggiunto la prima casella di un intervallo impegnato */ /* cont contiene la lunghezza dell'intervallo precedente */ stato = OCCUPATO; } else if (calendario[i] == LIBERO && stato == LIBERO) { /* incrementa la lunghezza del periodo libero che sta considerando */ cont++; sup++; if (lungh < cont) { /* aggiorna i riferimenti all'intervallo piu' lungo */ lungh = cont; l_inf = inf; l_sup = sup; } } else if (calendario[i] == LIBERO && stato == OCCUPATO) { /* ho raggiunto la prima casella di un intervallo libero */ cont = 1; stato = LIBERO; inf = i; sup = i; } /* Se (calendario[i] == OCCUPATO && stato == OCCUPATO), continua a scorrere il calendario */ } /* printf("lunghezza periodo libero piu' lungo: %d (%d, %d)\n", lungh, l_inf, l_sup); */ printf("%d\n", lungh); return 0; }