Pagini recente » Cod sursa (job #1397432) | Cod sursa (job #1654308) | Cod sursa (job #123449) | Cod sursa (job #2882958) | Cod sursa (job #346577)
Cod sursa(job #346577)
#include <stdio.h>
#include <string>
using namespace std;
#define Nmax 11
#define Lmax 10001
int a[Lmax];
int t,n,i;
string s;
int work(){
int i,zs;
string :: iterator it =s.begin();
for(i=0,zs=0; i<n && zs<s.size() ;){
if(a[i]==s[zs]-'0') i++, zs++;
else{
if(s[zs]=='1' || s[zs]=='2' || s[zs]=='3') return 0;
if(a[i]==1){
if(s[zs] == 'A') i++,zs++; else
if(s[zs] == 'B'){
s.erase(zs,1);
s.insert(zs,"1A3AC");
zs++, i++;
}else
if(s[zs] == 'C'){
s.erase(zs,1);
s.insert(zs,"12A");
zs++, i++;
}
} else
if(a[i]==2){
if(s[zs] == 'A' || s[zs] == 'C') i++,zs++;
else s.insert(zs,"2"), i++, zs++; // era B si bag 2B
}else
if(a[i]==3){
if(s[zs] == 'A') zs++,i++; else
if(s[zs] == 'B') return 0; else
if(s[zs] == 'C'){
s.erase(zs,1);
s.insert(zs,"3BC");
zs++, i++;
}
}
}
}
if(i==n && zs == s.size()) return 1;
return 0;
}
int solve(){
if(n==1) return 1;
if(a[0] == 1){
if(n == 3 && a[1]==2) return 1;
else s="1A3AC";
} else
if(a[0] == 2) s="2B";
else s="3BC";
return work();
}
int main(){
freopen("perle.in","r",stdin);
freopen("perle.out","w",stdout);
scanf("%d",&t);
for(; t; t--){
scanf("%d",&n);
for(i=0;i<n;++i) scanf("%d",&a[i]);
printf("%d\n",solve());
}
fclose(stdin); fclose(stdout);
return 0;
}