Cod sursa(job #253859)

Utilizator lamez0rBogdan Bondor lamez0r Data 6 februarie 2009 13:01:47
Problema Episoade Scor 20
Compilator c Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 1 Marime 1.47 kb
#include<stdio.h>
#include<string.h>
char sir[1001];
int n,t,a[101],pos[101],sol[101],nr,uz[101],mult[101][101],r,b[101];
FILE *g;

void back (int k)
	{
	if (k==n+1)
		{
		r++;
		int i;
		for (i=1;i<=n;++i)
			mult[r][i]=sol[i];
		}
	else
		if (k==1)
			{
			int i;
			for (i=1;i<=nr;++i)
				{
				sol[k]=pos[i];
				uz[pos[i]]=1;
				back(k+1);
				uz[pos[i]]=0;
				}
			}
		else
			{
			if (a[sol[k-1]]==0)
				{
				int i;
				for (i=1;i<=n;++i)
					if (!uz[i]&&!b[i])
						{
						uz[i]=1;
						sol[k]=i;
						back(k+1);
						uz[i]=0;
						}
				}
			else
				{
				sol[k]=a[sol[k-1]];
				uz[a[sol[k-1]]]=1;
				back(k+1);
				uz[a[sol[k-1]]]=0;
				}
			}
	}

void read ()
	{
	FILE *f=fopen("episoade.in","r");
	fscanf(f,"%s",&sir);
	int ok,i,poz=0,j,linie[100],gasit,k;
	pos[++nr]=sir[0]-'0';
	while ( poz<strlen(sir) )
		{
		if ( sir[poz] == '>')
			{
			a[sir[poz-1]-'0']=sir[poz+1]-'0';
			b[sir[poz+1]-'0']=sir[poz-1]-'0';
			}
		if (sir[poz] == '#' )
			pos[++nr]=sir[poz+1]-'0';
		poz++;
		}
	fscanf(f,"%d%d",&t,&n);
	back (1);
	for (i=1;i<=t;++i)
		{
		for (j=1;j<=n;++j)
			fscanf(f,"%d",&linie[j]);
		gasit=0;
		for (j=1;j<=r&&!gasit;++j)
			{
			ok=1;
			for(k=1;k<=n&&ok;++k)
				if (linie[k]!=mult[j][k])
					ok=0;
			if (ok)
				gasit=1;
			}
		if (gasit)
			fprintf(g,"1\n");
		else
			fprintf(g,"0\n");
		}
	}

int main ()
{
g=fopen("episoade.out","w");
read ();
return 0;
}