Cod sursa(job #678962)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 12 februarie 2012 16:36:37
Problema Party Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.1 kb
#include <cstdio>
#include <stdlib.h>
#include <time.h>

#define MAXP 105
#define MAXC 1005

using namespace std;

struct cond
{
    int a, b, c;
}condition[MAXC];

bool v[MAXP];
int n,m;

void citire()
{
    freopen("party.in", "r", stdin);
    scanf("%d %d\n", &n, &m);
    for(int i = 1; i <= m; i++)
    {
        scanf("%d %d %d", &condition[i].a, &condition[i].b, &condition[i].c);
    }
    fclose(stdin);
}

int check()
{
    for(int i = 1; i <= m; i++)
    {
        switch(condition[i].c)
        {
            case 0:
            {
                if(!v[condition[i].a] && !v[condition[i].b])
                    return i;
                break;
            }
            case 1:
            {
                if(!v[condition[i].a] && v[condition[i].b])
                    return i;
                break;
            }
            case 2:
            {
                if(v[condition[i].a] && !v[condition[i].b])
                    return i;
                break;
            }
            case 3:
            {
                if(v[condition[i].a] && v[condition[i].b])
                    return i;
                break;
            }
        }
    }
    return -1;
}

void randomized()
{
    int i, k, q=32677;
    //srand(time(NULL));
    while((i = check()) != -1)
    {
        k = rand()&q;
        if(k < 16384)
        {
            if(v[condition[i].a])
                v[condition[i].a] = false;
            else
                v[condition[i].a] = true;
        }
        else
        {
            if(v[condition[i].a])
                v[condition[i].a] = false;
            else
                v[condition[i].a] = true;
        }
    }
}

void afisare()
{
    freopen("party.out", "w", stdout);
    int value = 0, i;
    for(i = 1; i <= n; i++)
    {
        if(v[i])
            value++;
    }
    printf("%d\n", value);
    for(i = 1; i <= n; i++)
    {
        if(v[i])
            printf("%d\n", i);
    }
    fclose(stdout);
}
int main()
{
    citire();
    randomized();
    afisare();
    return 0;
}