Pagini recente » Cod sursa (job #265547) | Cod sursa (job #1885968) | Borderou de evaluare (job #778045) | Cod sursa (job #2534545) | Cod sursa (job #56795)
Cod sursa(job #56795)
#include <cstdio>
#include <cstring>
FILE *in = fopen("perle.in", "r"), *out = fopen("perle.out", "w");
int n;
int a[11][10001];
int t = 0, poz = 0;
void verifica(int i, char *s)
{
if ( s[0]=='b' )
{
switch ( a[i][poz] )
{
case 2:
poz++;
verifica(i, "b");
break;
case 1:
if ( poz+4 <= a[i][0] && a[i][poz+2] == 3 )
{
poz += 4;
verifica(i, "c");
}
break;
}
}
else
if ( s[0] == 'c' )
{
if ( poz + 2 < a[i][0] && a[i][poz] == 3 )
{
poz++;
verifica(i, "bc");
}
else
{
switch( a[i][poz] )
{
case 1:
if ( poz+2 <= a[i][0] && a[i][poz+1] == 2 )
{
poz += 2;
t = 1;
}
break;
case 2:
t = 1;
break;
}
}
}
if ( t )
{
if ( strlen(s) > 1 && poz > a[i][0] )
t = 0;
else
if ( strlen(s) > 1 && poz < a[i][0])
{
t = 0;
poz++;
verifica(i, s+1);
}
}
}
int main()
{
fscanf(in, "%d", &n);
for ( int i = 0; i < n; ++i )
{
fscanf(in, "%d", &a[i][0]);
for ( int j = 1; j <= a[i][0]; ++j )
fscanf(in, "%d", &a[i][j]);
}
for ( int i = 0; i < n; ++i )
{
t = 0;
if( a[i][0] == 1 )
fprintf(out, "%d\n", 1);
else
{
t = 0;
switch ( a[i][1] )
{
case 2:
poz = 2;
verifica(i, "b");
break;
case 1:
if ( a[i][0] == 3 && a[i][2] == 2 )
t = 1;
else
if ( a[i][0] > 4 && a[i][3] == 3 )
{
poz = 5;
verifica(i, "c");
}
break;
case 3:
poz = 2;
verifica(i, "bc");
break;
}
fprintf(out, "%d\n", t);
}
}
return 0;
}