Pagini recente » Cod sursa (job #1132996) | Cod sursa (job #2288287) | Istoria paginii runda/oji_bv_11-12_2025 | Istoria paginii runda/inca_vacanta_x/clasament | Cod sursa (job #428220)
Cod sursa(job #428220)
// perle.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <set>
#include <queue>
#include <deque>
#include <string>
#include <cassert>
#include <iostream>
#include <iterator>
const int LMAX = 10011;
int N, L;
char l[LMAX];
char e[LMAX];
char cpy[LMAX];
int x=0,curent=0,b=0,r=0,de=0;
void lit(int i);
void citire()
{
scanf("%d",&L);
for(int i = 1 ; i <= L ; i++)
scanf("%d",&l[i]);
}
int bac()
{
for(int i = 1 ; i <= L ; i++)
{
if(e[i]=='A' || e[i] == 'B' || e[i]=='C')
lit(i);
if(e[i] != l[i])
return 0;
}
if(e[L+1])
return 0;
else
return 1;
}
void lit(int i)
{
if(e[i]=='A')
{
if(l[i]==1)
e[i]=1;
else if(l[i]==2)
e[i]=2;
else if(l[i]==3)
e[i]=3;
}
else if(e[i]=='B')
{
if(l[i]==1)
{
memcpy(cpy,e+i+1,L);
e[i]=1;
e[i+1]='A';
e[i+2]=3;
e[i+3]='A';
e[i+4]='C';
memcpy(e+i+5,cpy,L);
}
else
{
memcpy(cpy,e+i+1,L);
e[i]=2;
e[i+1]='B';
memcpy(e+i+2,cpy,L);
}
}
else if(e[i]=='C')
{
if(l[i]==1)
{
memcpy(cpy,e+i+1,L);
e[i]=1;
e[i+1]=2;
e[i+2]='A';
memcpy(e+i+3,cpy,L);
}
else if(l[i]==2)
e[i]=2;
else
{
memcpy(cpy,e+i+1,L);
e[i]=3;
e[i+1]='B';
e[i+2]='C';
memcpy(e+i+3,cpy,L);
}
}
}
int main()
{
freopen("perle.in","r",stdin);
freopen("perle.out","w",stdout);
scanf("%d\n",&N);
for(int i=1;i<=N;i++)
{
citire();
memset(e,0,LMAX);
e[1]='A';
if(bac())
{
printf("1\n");
continue;
}
memset(e,0,LMAX);
e[1]='B';
if(bac())
{
printf("1\n");
continue;
}
memset(e,0,LMAX);
e[1]='C';
if(bac())
printf("1\n");
else
printf("0\n");
}
return 0;
}