Cod sursa(job #1804581)
Utilizator | Data | 12 noiembrie 2016 19:21:52 | |
---|---|---|---|
Problema | Perle | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.36 kb |
#include <cstdio>
#include <deque>
using namespace std;
int v[10010];
deque <int> q;
int main()
{
freopen("perle.in","r",stdin);
freopen("perle.out","w",stdout);
int n,m,i,j;
bool sem;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&m);
for(j=1;j<=m;j++) scanf("%d",&v[j]);
sem=0;
if(m==1){
printf("1\n");
continue;
}
if(v[1]==1){
if(m==3 and v[2]==2){
printf("1\n");
continue;
}
else{
q.push_front(10);
q.push_front(3);
q.push_front(10);
q.push_front(30);
}
}
if(v[1]==2) q.push_front(20);
if(v[1]==3){
q.push_front(20);
q.push_front(30);
}
for(j=2;j<=m;j++){
if(q.empty()){
sem=1;
break;
}
if(q.back()<10){
if(q.back()!=v[j]){
sem=1;
break;
}
q.pop_back();
}
else{
if(q.back()==10) q.pop_back();
else{
if(q.back()==20){
q.pop_back();
if(v[j]==1){
q.push_back(30);
q.push_back(10);
q.push_back(3);
q.push_back(10);
}
if(v[j]==2) q.push_back(20);
if(v[j]==3){
sem=1;
break;
}
}
else{
q.pop_back();
if(v[j]==1){
q.push_back(10);
q.push_back(2);
}
if(v[j]==3){
q.push_back(30);
q.push_back(20);
}
}
}
}
}
if(sem==1 or !q.empty()) printf("0\n");
else printf("1\n");
while(!q.empty()) q.pop_back();
}
return 0;
}