Cod sursa(job #33767)

Utilizator ionel71089lescai ionel ionel71089 Data 19 martie 2007 19:54:33
Problema Party Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream.h>
#include<math.h>
ifstream f("party.in");
ofstream g("party.out");
long long q;
int a(long long x)
	{
	long long l=pow(2,x-1);
	if((q & l)!=0)return 1;
	else return 0;
	}
int zero(int x,int y)
	{
	if(!a(x) && !a(y))return 0;
	return 1;
	}
int unu(int x,int y)
	{
	if(!a(x) && a(y))return 0;
	return 1;
	}
int doi(int x,int y)
	{
	return unu(y,x);
	}
int trei(int x,int y)
	{
	if(a(x) && a(y))return 0;
	return 1;
	}
typedef struct _cond
	{
	int x,y,c;
	}Cond;
int main()
{
int n,m,i,ok,k=0;
long long qmax=pow(2,n)-1;
Cond c[1001];
f>>n>>m;
qmax=pow(2,n)-1;
for(i=1;i<=m;i++)
	f>>c[i].x>>c[i].y>>c[i].c;
for(q=1;q<=qmax;q++)
	{
	ok=1;
	for(i=1;i<=m && ok;i++)
		{
		switch(c[i].c)
			{
			case 0:ok=zero(c[i].x,c[i].y);break;
			case 1:ok=unu(c[i].x,c[i].y);break;
			case 2:ok=doi(c[i].x,c[i].y);break;
			case 3:ok=trei(c[i].x,c[i].y);break;
			}
		}
	if(ok)
		{
		k=0;
		for(i=1;i<=n;i++)k+=a(i);
		g<<k<<"\n";
		for(i=1;i<=n;i++)
			if(a(i))
				g<<i<<"\n";
		//g.close();
		return 0;
		}
	}
g.close();
return 0;
}