Cod sursa(job #134700)

Utilizator ViksenVictor-Nicolae Savu Viksen Data 12 februarie 2008 08:18:47
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <stdio.h>
#include <string.h>
#define max 0xFFFFFFFF

unsigned long N[10000] , M [10000] , A[10000] , B[10000];
int n,m,i,j,x,y,r,k,rn,rm;

void Extract ( unsigned long *A , unsigned long *B )
{
    int i;
    for ( i=1 ; i<=n ; i++ )
       A[i] = A[i]&&!B[i] ;
}

void Deny ( unsigned long *A , unsigned long *B )
{
    int i;
    for ( i=1 ; i<=n ; i++ )
       A[i]=B[i]&&A[i];
}

void count ( unsigned long *A , int &x , int &k )
{
    int i;
    for ( i=1 ; i<=n ; i++ ) 
        if (A[i]) x++ , k = i;
}

int main ()
{
 	freopen ( "balanta.in" , "r" , stdin );
    scanf ( "%d %d" , &n , &m );
    memset ( N , 1 , sizeof ( int )*n+2 );
    memset ( M , 1 , sizeof ( int )*n+2 );
    for ( i=0 ; i<m ; i++ ) {
       scanf ( "%d" , &x );
       memset ( A , 0 , sizeof ( int ) * n + 2 );
       memset ( B , 0 , sizeof ( int ) * n + 2 );
       for ( j=0 ; j<x ; j++ ) {
           scanf ( "%d" , &r );
           A[r]=1;
       }
       for ( j=0 ; j<x ; j++ ) {
           scanf ( "%d" , &r );
           B[r]=1;
       }
       scanf ( "%d" , &k );
       if ( k == 0 ) {
           Extract ( N , A );
           Extract ( N , B );
           Extract ( M , A );
           Extract ( M , B );
       }
       if ( k == 1 ) {
           Deny ( N , A );
           Deny ( M , B );
       }
       if ( k==2 ) {
           Deny ( M , A );
           Deny ( N , B );
        }
    }
	x=0;y=0;rn=0;rm=0;
    count ( N , x , rn );
    count ( M , y , rm );
    freopen ( "balanta.out" , "w" , stdout );
    if ( !( ((x==1)&&(y==0))||((x==0)&&(y==1)) ) ) printf (  "0\n" ) ; else
        if ( x==1 ) printf ( "%d\n" , rn ) ; else printf ( "%d\n" , rm );
    fclose ( stdout );
    return 0;
}