Pagini recente » Cod sursa (job #3153673) | Cod sursa (job #2157820) | Cod sursa (job #2870134) | Cod sursa (job #3286108) | Cod sursa (job #253926)
Cod sursa(job #253926)
#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] > 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\n",&T);
for(int i = 1;i <= T; ++i)
{
for(int j = 1;j <= NR; ++j)
scanf("%d ",&B[j]);
for(int j = 1;j <= NR; ++j)
C[j] = B[A[j]];
printf("%d\n",solve(1,NR));
}
return 0;
}