Cod sursa(job #145875)

Utilizator rastbananaPanait-Ardelean Alice rastbanana Data 29 februarie 2008 17:15:17
Problema Party Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream.h>
#include<stdlib.h>
#include<time.h>
int n,m,v[100],i,k,h;
long t;
struct {int a,b;}x[100];

int eval()
{
int i,y,z;
for(i=0;i<m;i++)
	{
	if(x[i].a>0) y=v[x[i].a];
	else
		{
		y=v[-x[i].a];
		if(y==0) y=1;
		else y=0;
		}
	if(x[i].b>0) z=v[x[i].b];
	else
		{
		z=v[-x[i].b];
		if(z==0) z=1;
		else z=0;
		}
	if(y+z==0) return i;
	}
return -1;
}

int main()
{
int caz;
ifstream fin("party.in");
ofstream fout("party.out");
fin>>n>>m;
randomize();
for(i=0;i<m;i++)
	{
	fin>>x[i].a>>x[i].b>>caz;
	switch(caz)
		{
		case 1: x[i].b=-x[i].b; break;
		case 2: x[i].a=-x[i].a; break;
		case 3: x[i].a=-x[i].a;
				  x[i].b=-x[i].b; break;
		}
	}
for(t=0;t<1000000000;t++)
	{
	for(i=1;i<=n;i++) v[i]=rand()%2;
	k=eval();
	if(k==-1)
		{
		k=0;
		for(i=1;i<=n;i++) k+=v[i];
		fout<<k<<'\n';
		for(i=1;i<=n;i++) if(v[i]==1) fout<<i<<'\n';
		fin.close();
		fout.close();
		return 0;
		}
	h=rand()%2;
	if(h==0)
		{
		if(x[k].a>0) v[x[k].a]=1-v[x[k].a];
		else v[-x[k].a]=1-v[-x[k].a];
		}
	else
		{
		if(x[k].b>0) v[x[k].b]=1-v[x[k].b];
		else v[-x[k].b]=1-v[-x[k].b];
		}
	}
fout<<"Nu exista solutie";
fin.close();
fout.close();
return 0;
}