Cod sursa(job #241322)

Utilizator ConsstantinTabacu Raul Consstantin Data 9 ianuarie 2009 20:13:12
Problema Balanta Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.24 kb
#include<stdio.h>
int sus[1050],jos[1050],c[1050],i,j,k,l,m,n,ok,nr1,nr2;
void scadere(){
        for(int i=1;i<=2*k;i++)
                {if(sus[c[i]]==0)nr1--;
                if(jos[c[i]]==0)nr2--;
                sus[c[i]]=jos[c[i]]=1;    }}
void intersectie(int l1,int l2,int h1,int h2)
{int i;
for(i=l1;i<=l2;i++)
        if(sus[c[i]]==sus[sus[0]]){sus[c[i]]=1;nr1--;}

for(i=h1;i<=h2;i++)
        if(jos[c[i]]==jos[jos[0]]){jos[c[i]]=1;nr2--;}
}
        
        

int main(){
FILE *f=fopen("balanta.in","r");
FILE *g=fopen("balanta.out","w");
fscanf(f,"%d %d",&n,&m);
nr1=nr2=n;
for(i=1;i<=m;i++)
        {fscanf(f,"%d",&k);
        for(j=1;j<=2*k;j++)
                fscanf(f,"%d",&c[j]);
       fscanf(f,"%d",&ok);
       if(k==1)
              {if(ok==0)scadere();
              else
              if(ok==1)
                {if(jos[c[1]]==0&&sus[c[2]]){fprintf(g,"%d",c[1]);
                                        fclose(f);
                                        fclose(g);
                                        return 0;}
                else
                if(sus[c[2]]==0&&jos[c[1]]){
                fprintf(g,"%d",c[2]);
                fclose(f);
                fclose(g);
                return 0;}
                else
                intersectie(2,2,1,1);}
            else
            if(ok==2)
                {if(sus[c[1]]==0&&jos[c[2]]){fprintf(g,"%d",c[1]);
                                        fclose(f);
                                        fclose(g);
                                        return 0;}
                else
                if(jos[c[2]]==0&&sus[c[1]]){fprintf(g,"%d",c[2]);
                                        fclose(f);
                                        fclose(g);
                                        return 0;}
                else
                intersectie(1,1,2,2);
                    }
              }
     else
     {if(ok==0)
        scadere();
     else
     if(ok==1)
        intersectie(k+1,2*k,1,k);
     else
        intersectie(1,k,k+1,2*k);
    }}
if(nr1+nr2>1)fprintf(g,"%d",0);
else
for(i=1;i<=n;i++)
        if(sus[i]==0||jos[i]==0)

               { fprintf(g,"%d",i);break;}
fclose(f);
fclose(g);
return 0;}