Cod sursa(job #64813)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 5 iunie 2007 19:28:02
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <stdio.h>
#include <stdlib.h>

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

int N, A[1002],S, B[1002],st,dr,x,s,p,S2,fin,lin,Q;
char chrs;
void result(char msg[], int p)
{
    fprintf(stderr, msg);
    printf("%d", p);
    exit(0);
}
int functie()
{
 if (fin==S)
   result("Keep up the good work", 10);
   else
   result("Wrong Answer", 0);
 return 0;
}
int main(void)
{
    int i, a, b;
    FILE *f;

    f = fopen(FIN, "r");
    if (!f) result("Fisier de intrare lipsa!", 0);
    if (fscanf(f, "%d", &N) != 1)
        result("Fisier de intrare corupt!", 0);
    for(i=1;i<=N;i++)
     {
     if (fscanf(f,"%d",&x)!=1) result("Fisier de intrare corupt!", 0);
     A[x]++;
     }
    f = fopen(FOK, "r");
    if (!f) result("Fisier ok lipsa!", 0);
    if (fscanf(f, "%d", &S) != 1)
        result("Fisier ok corupt!", 0);
    st=N;
    f = fopen(FOUT, "r");
    while (!feof(f))
     {
     Q=0;
     S2=0;
     fscanf(f, "%d", &Q);
     fscanf(f,"%c",&chrs);
     if (chrs=='\n') fscanf(f,"\n");
     if (feof(f))
      functie();
     if (chrs!='\n')
     fscanf(f, "%d", &S2);
     lin++;
     if (lin%2)
     {
      if (S2==0)
       {
       A[Q]--;
       B[Q]++;
       }
       else
      if ((A[Q]>0)&&(A[S2]>0))
      {
       A[Q]--;
       A[S2]--;
       B[Q]++;
       B[S2]++;
      }
      else
       result("Traversare imposibila", 0);
     }
     else
     {
       if (S2==0)
        {
       A[Q]++;
       B[Q]--;
        }
        else
       if ((B[Q]>0)&&(B[S2]>0))
      {
       B[Q]--;
       B[S2]--;
       A[Q]++;
       A[S2]++;
      }
      else
       result("Traversare imposibila", 0);
     }
   if (Q>S2) fin+=Q;
        else fin+=S2;
     }
    return 0;
}