Cod sursa(job #996824)

Utilizator DorelBarbuBarbu Dorel DorelBarbu Data 12 septembrie 2013 18:19:29
Problema Balanta Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.75 kb
#include <cstdio>
#include <iostream>
#define MAX 1030
#include <cstring>
#include <fstream>
using namespace std;

bool h[MAX] , l[MAX] , a[MAX] , b[MAX] ;


void scrie(bool v[MAX], int n )
{
    int i ;

    for( i=1; i<=n; i++)
    {
        cout<<v[i]<<' ';
    }
}

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

    int  n , m , k , r , i , x , j , card_h , card_l ;

    scanf("%d %d", &n, &m);

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

        l[i] = 1 ;
    }

    card_h = n ;

    card_l = n ;

    for( i=1 ; i<=m ; i++ )
    {
        scanf("%d", &k);

        memset(a, 0, sizeof(a));

        memset(b, 0, sizeof(b));

        for( j = 1 ; j <= k ; j++ )
        {
            scanf("%d", &x);

            a[x] = 1;
        }

        for( j ; j <= 2*k ; j++ )
        {
            scanf("%d", &x);

            b[x] = 1;
        }

        scanf("%d", &r);

        if( r == 0 )
        {
            for( j = 1 ; j <= n ; j++ )
            {
                if( a[j] || b[j] )
                {
                    h[j]=0;

                    l[j]=0;

                    if( card_h ) card_h--;

                    if( card_l ) card_l--;
                }
            }
        }
        else if( r == 1 )
        {
            for( j = 1 ; j <= n ; j++ )
            {
                if( h[j] != a[j] )
                {
                    h[j] = 0 ;

                    if( card_h ) card_h-- ;
                }

                if( l[j] != b[j] )
                {
                    l[j] = 0 ;

                    if( card_l ) card_l-- ;
                }
            }
        }
        else
        {
            for( j = 1; j <= n; j++ )
            {
                if( h[j] != b[j] )
                {
                    h[j] = 0 ;

                    if( card_h ) card_h-- ;
                }

                if( l[j] != a[j] )
                {
                    l[j] = 0 ;

                    if( card_l ) card_l-- ;
                }
            }
        }
    }

    if( card_h == 1 && card_l == 0 )
    {
        for ( i = 1 ; i <= n ; i++ )
        {
            if( h[i] == 1 )
            {
                printf("%d", i);

                return 0;
            }
        }
    }
    else
    {
        if( card_h == 0 && card_l == 1 )
        {
            for ( i = 1 ; i <= n ; i++ )
            {
                if( l[i] == 1 )
                {
                    printf("%d", i);

                    return 0;
                }
            }
        }
        else
        {
            printf("0");
        }
    }

    return 0 ;
}