Pagini recente » Istoria paginii utilizator/uvt_code_breakers | Rezultatele filtrării | Sedinta 2008-03-03 | Borderou de evaluare (job #2426601) | Cod sursa (job #253991)
Cod sursa(job #253991)
#include<stdio.h>
char R[1001];
int L,K,P1[1001],P2[1001],G[500][20],F[20][20],NG,N,VR[20];
int cifra(char c)
{
int i=0;
while ((i<=9)&&(i!=c))
++i;
return i;
}
void gaseste(int le,int ri)
{
++NG;
int j=1,t=0,ver=0,ver2=0;
while (le<ri)
{
int pr=0;
if (le>2) if (R[le-2]==')') pr=1;
if (R[le]=='(')
{
le=P2[P1[K+j]]+1;
if (ver)
{
ver=0;
if (pr==0)
for (int i=1;i<=G[NG-j][0];++i)
{
++F[G[NG-j][i]][0];
F[G[NG-j][i]][F[G[NG-j][i]][0]]=G[NG][t];
}
else
for (int i=1;i<=G[NG-j][0];++i)
for (int a=1;a<=G[NG-j-1][0];++a)
{
++F[G[NG-j][i]][0];
F[G[NG-j][i]][F[G[NG-j][i]][0]]=F[G[NG-j-1][a]][F[G[NG-j-1][a]][0]];
}
}
if (ver2)
{
ver2=0;
for (int i=1;i<=G[NG-j][0];++i)
F[G[NG-j][i]][1]=-(NG-j);
for (int i=1;i<=G[NG-j-1][0];++i)
F[G[NG-j-1][i]][1]=-(NG-j-1);
}
++j;
}
else
if ((R[le]!=')')&&(R[le]!='#')&&(R[le]!='>'))
{
int h;
if ((R[le+1]!=')')&&(R[le+1]!='#')&&(R[le+1]!='>'))
{le+=2;h=2;++t;G[NG][t]=( (cifra(R[le-2])*10) + cifra(R[le-1]) );}
else {++le;h=1;++t;G[NG][t]=cifra(R[le-1]);}
if (ver)
{
if (le>h+1) if (R[le-h-1]==')')
{
ver=0;
for (int i=1;i<=G[NG-j][0];++i)
F[G[NG][t]][F[G[NG][t]][0]+i]=G[NG-j][i];
F[G[NG][t]][0]+=G[NG-j][0];
}
if (ver)
{++F[G[NG][t]][0];F[G[NG][t]][F[G[NG][t]][0]]=G[NG][t-1];ver=0;}
}
}
else
if (R[le]=='>') {ver=1;++le;}
else
{
if ((R[le]=='#')&&(R[le-1]==')')&&(R[le+1]=='(')) ver2=1;
++le;
}
}
G[NG][0]=t;
}
int main()
{
freopen("episoade.in","r",stdin);
freopen("episoade.out","w",stdout);
fgets(R,1000,stdin);
scanf("%d",&N,&L);
int y=1;
while (R[y])
{
if (R[y]=='(') {++K;P1[K]=y;}
else if(R[y]==')') P2[P1[K]]=y;
++y;
}
--y;
while (K>0) {gaseste(P1[K]+1,P2[P1[K]]-1);--K;}
gaseste(1,y);
for (int i=1;i<=N;++i)
{
int w=0,r=1;
for (int y=1;y<=L;++y)
scanf("%d",VR[y]);
for (int y=1;y<=L,r<y;++y)
{
int r=1;
if(F[VR[y]][1]>0)
for (int j=1;j<=F[VR[y]][0],r!=y;++j)
while((F[VR[y]][j]!=VR[r])&&(r<y))++r;
if (r==y) w=1;
}
printf("%d\n",w);
}
return 0;
}