Pagini recente » Cod sursa (job #1516198) | Cod sursa (job #1174685) | Cod sursa (job #1867292) | Cod sursa (job #1115923) | Cod sursa (job #253859)
Cod sursa(job #253859)
#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;
}