Cod sursa(job #3231426)

Utilizator catalinaionela77Catalina Ionela Florescu catalinaionela77 Data 26 mai 2024 13:20:10
Problema Hotel Scor 50
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <stdio.h>
#include <stdlib.h>

#define MAX_N 100000

int main() {
    FILE *input = fopen("hotel.in", "r");
    FILE *output = fopen("hotel.out", "w");

    if (input == NULL || output == NULL) {
        printf("Nu s-a putut deschide fisierul!");
        return 1;
    }

    int N, P;
    fscanf(input, "%d %d", &N, &P);

    int *hotel = (int *)malloc((MAX_N + 1) * sizeof(int));
    for (int i = 0; i <= MAX_N; ++i) {
        hotel[i] = 1; // Initial, toate camerele sunt libere
    }

    int max_consecutive_length = N;

    for (int i = 0; i < P; ++i) {
        int type, start, members;
        fscanf(input, "%d", &type);
        if (type == 1) {
            fscanf(input, "%d %d", &start, &members);
            for (int j = start; j < start + members; ++j) {
                hotel[j] = 0; // Marcheaza camerele ocupate de grupul nou de turisti
            }
        } else if (type == 2) {
            fscanf(input, "%d %d", &start, &members);
            for (int j = start; j < start + members; ++j) {
                hotel[j] = 1; // Marcheaza camerele eliberate de grupul care pleaca
            }
        } else if (type == 3) {
            // Calculeaza lungimea maxima a secventei de camere libere
            int current_length = 0;
            int max_length = 0;
            for (int j = 1; j <= N; ++j) {
                if (hotel[j] == 1) {
                    current_length++;
                } else {
                    max_length = (current_length > max_length) ? current_length : max_length;
                    current_length = 0;
                }
            }
            max_length = (current_length > max_length) ? current_length : max_length;
            fprintf(output, "%d\n", max_length);
        }
    }

    fclose(input);
    fclose(output);
    free(hotel);

    return 0;
}