Cod sursa(job #3135009)

Utilizator alvaro.regueira-vilarAlvaro Regueira Vilar alvaro.regueira-vilar Data 1 iunie 2023 14:41:31
Problema Deque Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.97 kb
#include <stdio.h>
#define MAX_SIZE 5000000
int main() {
    // Abrir archivo de entrada
    FILE *inputFile = fopen("deque.in", "r");
    if (inputFile == NULL) {
        printf("No se pudo abrir el archivo de entrada.\n");
        return 1;
    }

    // Leer N y K desde el archivo de entrada
    int N, K;
    fscanf(inputFile, "%d %d", &N, &K);

    // Validar restricciones
    if (N < 1 || N > 5000000 || K < 1 || K > N) {
        printf("Restricciones no cumplidas.\n");
        fclose(inputFile);
        return 1;
    }

    // Leer los elementos del vector A desde el archivo de entrada
    int A[MAX_SIZE];
    int i;
    for (i = 0; i < N; i++) {
        fscanf(inputFile, "%d", &A[i]);
        if (A[i] < -10000000 || A[i] > 10000000) {
            printf("Restricciones no cumplidas.\n");
            fclose(inputFile);
            return 1;
        }
    }

    // Cerrar archivo de entrada
    fclose(inputFile);

    // Inicializar la deque
    Deque deque;
    initializeDeque(&deque);

    // Calcular la suma de los mínimos
    long long sumOfMinimums = 0;

    // Procesar los enteros
    for (i = 0; i < N; i++) {
        // Eliminar el frente si la deque tiene más de K elementos
        if (i >= K) {
            deleteFront(&deque);
        }

        // Insertar el elemento actual al final de la deque
        insertRear(&deque, A[i]);

        // Si la deque tiene K elementos, obtener el mínimo y agregarlo a la suma
        if (i >= K - 1) {
            int minimum = getMinimum(&deque);
            sumOfMinimums += minimum;
        }
    }

    // Abrir archivo de salida
    FILE *outputFile = fopen("deque.out", "w");
    if (outputFile == NULL) {
        printf("No se pudo abrir el archivo de salida.\n");
        return 1;
    }

    // Escribir el resultado en el archivo de salida
    fprintf(outputFile, "%lld\n", sumOfMinimums);

    // Cerrar archivo de salida
    fclose(outputFile);

    return 0;
}