Cod sursa(job #172605)

Utilizator hadesgamesTache Alexandru hadesgames Data 6 aprilie 2008 16:44:31
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.72 kb
#include <stdio.h>
int a[30][30],e[50],c[50],d,k,n,nr1;
FILE *in,*out;
/*int ver()
{
	int i,j,nr=0;
	for (i=1;i<=d;i++)
		c[i]=0;
	for (i=1;i<=n;i++)
	{
		if (e[i])
		{
			for (j=1;j<=a[i][0];j++)
				c[a[i][j]]=1;
			nr++;

		}
	}
	if (nr!=k)
		y=0;
	for (i=1;i<=d;i++)
		if (!c[i])
			y=0;
	y=1;
} */
void back (int x)
{
	int i,j,nr=0,y,nr2=d;
	if (x==n+1)
	{
		for (i=1;i<=d;i++)
			c[i]=0;
		for (i=1;i<=n;i++)
		{
			if (e[i])
			{
				for (j=1;j<=a[i][0];j++)
					if (!c[a[i][j]])
					{
						c[a[i][j]]=1;
						nr2--;
					}
				nr++;

			}
		}
		if (nr==k&&nr2==0)
			y=1;
		else
			y=0;
		if (y)
		{

			for (i=1;i<=n;i++)
				if (e[i])
					fprintf(out,"%d ",i);
			fprintf(out,"\n");
		}
	}
	else
	{
		if (k-nr1==n-x+1)
		{
			for (i=x;i<=n;i++)
				e[i]=1;
			back(n+1);
			return;
		}
		if(nr1==k)
		{
			for (i=x;i<=n;i++)
				e[i]=0;
			back(n+1);
			return ;
		}
		if (nr1!=k)
		{
			e[x]=1;
			nr1++;
			back(x+1);
			nr1--;
		}
		e[x]=0;
		if (k-nr1!=n-x+1)
			back(x+1);

	}
}
int main()
{
	int i,j;
	in=fopen("pluricex.in","r");
	out=fopen("pluricex.out","w");
	fscanf(in,"%d%d%d",&n,&k,&d);
	for (i=1;i<=n;i++)
	{
		fscanf(in,"%d",&a[i][0]);
		for (j=1;j<=a[i][0];j++)
		{
			fscanf(in,"%d",&a[i][j]);
		}

	}
	back(1);
	fclose(in);
	fclose(out);
	return 0;
}
/*#include <stdio.h>
int a[30][30],e[50],c[50],d,k,n,nr1;
FILE *in,*out;
int ver()
{
	int i,j,nr=0;
	for (i=1;i<=d;i++)
		c[i]=0;
	for (i=1;i<=n;i++)
	{
		if (e[i])
		{
			for (j=1;j<=a[i][0];j++)
				c[a[i][j]]=1;
			nr++;

		}
	}
	if (nr!=k)
		y=0;
	for (i=1;i<=d;i++)
		if (!c[i])
			y=0;
	y=1;
}
void back (int x)
{
	int i,j,nr=0,y,nr2=d;
	if (x==n+1)
	{
		for (i=1;i<=d;i++)
			c[i]=0;
		for (i=1;i<=n;i++)
		{
			if (e[i])
			{
				for (j=1;j<=a[i][0];j++)
					if (!c[a[i][j]])
					{
						c[a[i][j]]=1;
						nr2--;
					}
				nr++;

			}
		}
		if (nr==k&&nr2==0)
			y=1;
		else
			y=0;
		if (y)
		{

			for (i=1;i<=n;i++)
				if (e[i])
					fprintf(out,"%d ",i);
			fprintf(out,"\n");
		}
	}
	else
	{
		if (k-nr1==n-x+1)
		{
			for (i=x;i<=n;i++)
				e[i]=1;
			back(n+1);
			return;
		}
		if(nr1==k)
		{
			for (i=x;i<=n;i++)
				e[i]=0;
			back(n+1);
			return ;
		}
		if (nr1!=k)
		{
			e[x]=1;
			nr1++;
			back(x+1);
			nr1--;
		}
		e[x]=0;
		if (k-nr1!=n-x+1)
			back(x+1);

	}
}
int main()
{
	int i,j;
	in=fopen("pluricex.in","r");
	out=fopen("pluricex.out","w");
	fscanf(in,"%d%d%d",&n,&k,&d);
	for (i=1;i<=n;i++)
	{
		fscanf(in,"%d",&a[i][0]);
		for (j=1;j<=a[i][0];j++)
		{
			fscanf(in,"%d",&a[i][j]);
		}

	}
	back(1);
	fclose(in);
	fclose(out);
	return 0;
} */