Cod sursa(job #1080953)

Utilizator rughibemBelcineanu Alexandru Ioan rughibem Data 13 ianuarie 2014 00:24:46
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<stdio.h>
#define DIM 1030
FILE *f=fopen("balanta.in","r"), *g=fopen("balanta.out","w");


long int n, m, r, k, kk, v[DIM], cit[DIM], v2[DIM];

    // v = 0, nu stiu nimic
    // v = 1, sigur e bun
    // v = 2, daca e fals, sigur e mai greu
    // v = 3, daca e fals, sigur e mai usor
    // v2= ce urmeaza sa pun,

void rezolvare(){
long int i, j;

    fscanf(f,"%ld %ld\n",&n,&m);
    for(i=1;i<=m;i++){

        fscanf(f,"%ld\n",&k); kk=k*2;
        for(j=1;j<=kk;j++){
            fscanf(f,"%ld",&cit[j]);
        }
        fscanf(f,"%ld",&r);

        if(r==0){   // toate cele citite sunt bune
            for(j=1;j<=kk;j++){
                v[ cit[j] ]=1;
            }
        }

        else{

            for(j=1;j<=n;j++){v2[j]=0;} // initializare v2

            if(r==1){   for(j=1;  j<=k; j++) v2[ cit[j] ]=3;
                        for(j=k+1;j<=kk;j++) v2[ cit[j] ]=2;  }

            if(r==2){   for(j=1;  j<=k; j++) v2[ cit[j] ]=2;
                        for(j=k+1;j<=kk;j++) v2[ cit[j] ]=3;  }

            for(j=1;j<=n;j++){

                if( v2[j]==0 ){ v[j]=1; }
                else if( (v2[j]==2 && v[j]==3) || (v2[j]==3 && v[j]==2) ){ v[j]=1; }
                else if( v[j]!=1 ){ v[j]=v2[j]; }

            }

        }

    }

}

void verificare(){
long int i, last=0, nr_bune=0;

    for(i=1;i<=n;i++){
        if(v[i]==1){nr_bune++;}
        else{last=i;}
    }
    if(nr_bune==n-1){fprintf(g,"%ld\n",last);}
    else{fprintf(g,"0");}

}

int main(){

    rezolvare(); fclose(f);
    verificare();fclose(g);

return 0;
}