Cod sursa(job #68976)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 30 iunie 2007 15:18:07
Problema Balanta Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>


int h[2000], l[2000], a[2000], b[2000], n, m, rez, x;

int scadere(int x[], int n, int y[], int m)
{
  int i, j, aux[2000], nr=0;
  for (i=1; i<=m; i++)
    for (j=1; j<=n; j++)
      {
	if (y[i]==x[j]) x[j]=0;
      }
  for (i=1; i<=n; i++)
    if (x[i]!=0) aux[++nr]=x[i];
  memcpy(x,aux,sizeof(aux));
  return nr;
}

int intersectie(int x[], int n, int y[], int m)
{
  int i, j, aux[2000], nr=0;
  for (i=1; i<=n; i++)
    for (j=1; j<=m; j++)
      if (x[i]==y[j]) aux[++nr]=x[i];
  memcpy(x,aux,sizeof(aux));
  return nr;
}


int main()
{
  freopen("balanta.in","r",stdin);
  freopen("balanta.out","w",stdout);

  int i, j, l1, l2;
  scanf ("%d %d",&n, &m);
  l1=l2=n;

  for (i=1; i<=n; i++)
    h[i]=l[i]=i;

  for (i=1; i<=m; i++)
    {
      scanf ("%d",&x);
      for (j=1; j<=x; j++)
	scanf ("%d",&a[j]);
      for (j=1; j<=x; j++)
	scanf ("%d",&b[j]);
      scanf("%d",&rez);

      switch (rez)
	{
	  case 0 : { l1=scadere(h,l1,a,x); l1=scadere(h,l1,b,x);
		     l2=scadere(l,l2,a,x); l2=scadere(l,l2,b,x);
		     break;}
	  case 1 : { l1=intersectie(h,l1,a,x); l2=intersectie(l,l2,b,x);
			break; }
	  case 2 : { l1=intersectie(h,l1,b,x); l2=intersectie(l,l2,a,x);
			break; }
	}
    }
  if (l1==1 && l2==0) printf("%d",h[1]);
     else if (l2==1 && l1==0) printf("%d",l[1]);
	    else printf("0");
  return 0;
}