Cod sursa(job #1257348)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 7 noiembrie 2014 17:11:33
Problema Balanta Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <stdio.h>
#define MAXN 1024
int a[MAXN+1], b[MAXN+1], m[MAXN+1], M[MAXN+1];
inline void init(int n, int v[], int val){
    int i;
    for(i=1; i<=n; i++){
        v[i]=val;
    }
}
inline int max(int a, int b){
    if(a>=b){
        return a;
    }
    return b;
}
int main(){
    int r, s, p, q, n, x, i, j, k;
    FILE *fin, *fout;
    fin=fopen("balanta.in", "r");
    fout=fopen("balanta.out", "w");
    fscanf(fin, "%d%d", &n, &q);
    init(n, M, 1);
    init(n, m, 1);
    for(i=0; i<q; i++){
        fscanf(fin, "%d", &k);
        init(n, a, 0);
        for(j=0; j<k; j++){
            fscanf(fin, "%d", &x);
            a[x]=1;
        }
        init(n, b, 0);
        for(j=0; j<k; j++){
            fscanf(fin, "%d", &x);
            b[x]=1;
        }
        fscanf(fin, "%d", &x);
        if(x==0){
            for(j=1; j<=n; j++){
                if((a[j]==1)||(b[j]==1)){
                    M[j]=0;
                    m[j]=0;
                }
            }
        }else if(x==1){
            for(j=1; j<=n; j++){
                if(a[j]==0){
                    M[j]=0;
                }
                if(b[j]==0){
                    m[j]=0;
                }
            }
        }
        else{
            for(j=1; j<=n; j++){
                if(a[j]==0){
                    m[j]=0;
                }
                if(b[j]==0){
                    M[j]=0;
                }
            }
        }
    }
    p=0;
    r=0;
    q=0;
    s=0;
    for(i=1; i<=n; i++){
        if(M[i]==1){
            p++;
            r=i;
        }
        if(m[i]==1){
            q++;
            s=i;
        }
    }
    if(p+q==1){
        fprintf(fout, "%d\n", max(r, s));
    }else{
        fprintf(fout, "0\n");
    }
    fclose(fin);
    fclose(fout);
    return 0;
}