Cod sursa(job #358437)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 23 octombrie 2009 04:31:59
Problema Balanta Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include<stdio.h>
#include<stdlib.h>

#define NM 1025
#define LSIR NM*4

typedef int set[NM];

int apartine(int x,set a){
int i;
for(i=1;i<=a[0];++i)
	if(a[i]==x) return 1;
return 0;
}

void intersectie(set a,set b,set c){
int i;
c[0]=0;
for(i=1;i<=a[0];++i)
	if(apartine(a[i],b)) c[0]++,c[c[0]]=a[i];
}

void copy(set src,set dest){
int i;
for(i=0;i<=src[0];++i) dest[i]=src[i];
}

void dif(set a,set b,set c){
int i;c[0]=0;
for(i=1;i<=a[0];++i)
	if(!apartine(a[i],b)) c[0]++,c[c[0]]=a[i];
}

int main(){
freopen("balanta.in","r",stdin);
freopen("balanta.out","w",stdout);
int i,k,s;
int n,m,l=0,h=0,e=0,mu,mg;
char sir[LSIR],*p;
mu=mg=0;
scanf("%d%d\n",&n,&m);
set st,dr,u,g,a;
for(i=1;i<=n;++i) u[i]=g[i]=i;
u[0]=g[0]=n;
while(m--){
	fgets(sir,LSIR,stdin); p=sir;
	k=atoi(p);
	while(*p!=32) p++;p++;
	for(i=1;i<=k;++i){
		st[i]=atoi(p);
		while(*p!=32) p++;p++;
		}
	for(i=1;i<=k;++i){
		dr[i]=atoi(p);
		while(*p!=32) p++;p++;
		}
	st[0]=dr[0]=k;
	s=atoi(p);
	if(!s){
		dif(u,st,a);copy(a,u);
		dif(u,dr,a);copy(a,u);
		dif(g,st,a);copy(a,g);
		dif(g,dr,a);copy(a,g);
		continue;
		}
	if(s==1){
		intersectie(g,st,a);
		copy(a,g);
		intersectie(u,dr,a);
		copy(a,u);
		}
	else{
		intersectie(u,st,a);
		copy(a,u);
		intersectie(g,dr,a);
		copy(a,g);
		}
	}
l=u[0],h=g[0],mu=u[1],mg=g[1];
if(l==1&&h==0) printf("%d",mu);
	else
		if(l==0&&h==1) printf("%d",mg);
		else printf("0");
return 0;
}