Cod sursa(job #501560)

Utilizator SpiderManSimoiu Robert SpiderMan Data 15 noiembrie 2010 18:45:17
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
# include <cstdio>

const char *FIN = "balanta.in", *FOU = "balanta.out" ;
const int MAX = 1 << 10 ;

bool A[MAX], B[MAX], st[MAX], dr[MAX] ;
short Ts[MAX], Td[MAX] ;
int N, M ;

bool check ( void ) {
    int sol = 0 ;
    for ( int i = 0; i < N; ++i ) {
        sol += A[i] + B[i] ;
    }
    return sol == 1 ;
}

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;

    scanf ( "%d %d", &N, &M ) ;
    for ( int i = 0; i < N; ++i ) {
        A[i] = B[i] = 1 ;
    }

    for ( int K, R ; M ; --M ) {
        scanf ( "%d", &K ) ;
        for ( int i = 0; i < K; ++i ) {
            st[i] = 0 ;
            scanf ( "%d", Ts + i ) ;
        }
        for ( int i = 0; i < K; ++i ) {
            dr[i] = 0 ;
            scanf ( "%d", Td + i ) ;
        }
        for ( int i = 0; i < K; ++i ) {
            st[ Ts[i] ] = dr[ Td[i] ] = 1 ;
        }
        scanf ( "%d", &R ) ;
        switch ( R ) {
        case 0 :
            for ( int i = 0; i < K; ++i ) {
                A[ Ts[i] ] = A[ Td[i] ] = B[ Ts[i] ] = B[ Td[i] ] = 0 ;
            }
            break ;
        case 1 :
            for ( int i = 0; i < N; ++i ) {
                A[i] &= dr[i], B[i] &= st[i] ;
            }
            break ;
        case 2 :
            for ( int i = 0; i < N; ++i ) {
                A[i] &= st[i], B[i] &= dr[i] ;
            }
            break ;
        }
    }

    if ( check () ) {
        for ( int i = 0; i < N; ++i ) {
            if ( A[i] || B[i] ) {
                fprintf ( fopen ( FOU, "w" ) , "%d", i ) ;
                return 0 ;
            }
        }
    } else {
        fprintf ( fopen ( FOU, "w" ) , "0" ) ;
    }
}