Cod sursa(job #96920)

Utilizator dReaMerAndrei Sofian dReaMer Data 4 noiembrie 2007 10:26:36
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <stdio.h>
#include <stdlib.h>

#define FIN "shop.in"
#define FOUT "shop.out"
#define FOK "shop.ok"

int N, C, A[32], B[32], NMin; long long L, V[32];

void error(char msg[], int p)
{
	fprintf(stderr, msg);
	printf("%d", p);
	exit(0);
}

int main(void)
{
    int i, a, nmin; long long p;
    FILE *f;

    f = fopen(FIN, "r");
    if (!f) error("Nu am putut deschide fisierul de intrare", 0);
    if (fscanf(f, "%d %d %lld", &N, &C, &L) != 3)
        error("Eroare in fisierul de intrare", 0);
    if  (N < 1 || N > 30 || C < 1 || C > 10 || L < 0 || L > (long long)1e16)
        error("Fisierul de intrare nu respecta restrictiile", 0);
    for (i = 0; i < N; i++)
    {
        if (fscanf(f, "%d %d", A+i, B+i) != 2)
            error("Eroare in fisierul de intrare", 0);
        if (A[i] < 0 || A[i] > 32 || B[i] < 1 || B[i] > (int)1e9)
            error("Fisierul de intrare nu respecta restrictiile", 0);
        for (p = 1, a = A[i]; a && p < L; a--, p *= C);
        V[i] = p;
        if (a) 
            error("Fisierul de intrare nu respecta restrictiile", 0);
    }

    f = fopen(FOK, "r");
    if (!f) error("Nu am putut deschide fisierul de verificare", 0);
    if (fscanf(f, "%d", &NMin) != 1)
        error("Eroare in fisierul de verificare", 0);

    f = fopen(FOUT, "r");
    if (!f) error("Fisier de iesire inexistent", 0);
    if (fscanf(f, "%d", &nmin) != 1)
        error("Raspuns gresit", 0);
    if (nmin != NMin)
        error("Raspuns gresit", 0);
    for (i = 0; i < N; i++)
    {
        if (fscanf(f, "%d", &a) != 1)
            error("Raspuns gresit", 0);
        if (a > B[i] || a < 0)
            error("Raspuns gresit", 0);
        for (; a; a--) L -= V[i];
    }
    if (!L)
        error("OK", 10);
    else
        error("Raspuns gresit", 0);

    return 0;
}