Pagini recente » Cod sursa (job #1205143) | Cod sursa (job #2845953) | Cod sursa (job #1604293) | Cod sursa (job #1003304) | Cod sursa (job #253951)
Cod sursa(job #253951)
#include<stdio.h>
#include<string.h>
const int maxn = 10000;
int T,POZ,NR,C[maxn],OP[maxn],A[maxn],B[maxn];
char S[maxn];
int form(int &poz,int len)
{
int cur = 0;
for(;poz < len && S[poz] >= '0' && S[poz] <= '9';++poz)
{
cur *= 10;
cur += S[poz] - '0';
}
return cur;
}
bool solve(int st,int dr)
{
if (dr - st == 1) return true;
for(int i = st;i < dr; ++i)
{
if (OP[i] == 1) return solve(st,i) & solve(i + 1,dr);
}
for(int i = st;i < dr; ++i)
{
if (C[i + 1] - C[i] != 1) return false;
}
return true;
}
int main()
{
freopen("episoade.in","r",stdin);
freopen("episoade.out","w",stdout);
fgets(S,100000,stdin);
int len = strlen(S) - 1;
for(;POZ < len;)
{
A[++NR] = form(POZ,len);
if (S[POZ] == '#') OP[NR] = 1;
else OP[NR] = 2;
++POZ;
}
scanf("%d %d\n",&T,&NR);
for(int i = 1;i <= T; ++i)
{
for(int j = 1;j <= NR; ++j)
{
int x = 0;
scanf("%d ",&x);
B[x] = j;
}
for(int j = 1;j <= NR; ++j)
C[j] = B[A[j]];
printf("%d\n",solve(1,NR));
}
return 0;
}