Cod sursa(job #25414)

Utilizator alecmanAchim Ioan Alexandru alecman Data 4 martie 2007 12:31:50
Problema Balanta Scor 30
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 10-a Marime 2.44 kb
/*
 *
 *
  info-arena 2.0 - preONI 2007 - Runda 3 - Balanta
 *
 *
 */

#include<stdio.h>
#include<string.h>

#define INPUT "balanta.in"
#define OUTPUT "balanta.out"
#define INFI -1000

FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");

int n,m,b[1025],a[1025];

void parcurg();

int main()
{
  parcurg();
  fclose(fin);
  fclose(fout);
  return 0;
}

void parcurg()
{
  fscanf(fin, "%d %d", &n, &m);
  int valoare[1025],valoare2[1025],k,temp1,temp2;
  memset(valoare,0,sizeof(valoare));
  memset(valoare2,0,sizeof(valoare2));
  for(int i=1;i<=m;++i)
  {
    fscanf(fin, "%d", &a[0]);
    k=a[0];
    for(int j=1;j<=k;++j)
      fscanf(fin, "%d", &a[j]);
    for(int j=k+1;j<=2*k;++j)
      fscanf(fin, "%d", &a[j]);
    fscanf(fin, "%d", &b[i]);
    if(b[i]==0)
      for(int j=1;j<=2*k;++j)
      {
        valoare[a[j]]=INFI;
        valoare2[a[j]]=INFI;
      }
    else
    if(b[i]==1)
    {
      temp1=0;
      temp2=0;
      for(int j=1;j<=k;++j)
      {
        if(valoare[a[j]]!=INFI)
          temp1=1;
        if(valoare2[a[j+k]]!=INFI)
          temp2=1;
      }
      if(!temp1)
        for(int j=1;j<=2*k;++j)
           valoare[j]=INFI;
      if(!temp2)
        for(int j=1;j<=2*k;++j)
           valoare2[j]=INFI;
      for(int j=k+1;j<=2*k;++j)
      {
        valoare[a[j]]=INFI;
        valoare2[a[j-k]]=INFI;
      }
    }
    else
    {
      temp1=0;
      temp2=0;
      for(int j=k+1;j<=2*k;++j)
      {
        if(valoare[a[j]]!=INFI)
          temp1=1;
        if(valoare[a[j-k]]!=INFI)
          temp2=1;
      }
      if(!temp1)
        for(int j=1;j<=2*k;++j)
           valoare[j]=INFI;
      if(!temp2)
        for(int j=1;j<=2*k;++j)
           valoare2[j]=INFI;
      for(int j=1;j<=k;++j)
      {
        valoare[a[j]]=INFI;
        valoare2[a[j+k]]=INFI;
      }
    }
  }
  int numar1,numar2,pozitie2,pozitie1;
  numar1=0;
  numar2=0;
  pozitie1=0;
  pozitie2=0;
  for(int i=1;i<=n;++i)
  {
    if(valoare[i]==0)
    {
      ++numar1;
      pozitie1=i;
    }
    if(valoare2[i]==0)
    {
      ++numar2;
      pozitie2=i;
    }
  }
  if((numar1==0&&numar2==0)||(numar1==1&&numar2==1)||(numar1>1&&numar2==0)||(numar1==0&&numar2>1)||(numar1>1&&numar2>1))
    fprintf(fout, "0\n");
  else
    if(numar1==1&&numar2!=1)
      fprintf(fout, "%d\n", pozitie1);
    else
    if(numar2==1&&numar1!=1)
      fprintf(fout, "%d\n", pozitie2);
}