Cod sursa(job #672676)
Utilizator | Data | 2 februarie 2012 21:38:23 | |
---|---|---|---|
Problema | Perle | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.36 kb |
#include<iostream>
#include<fstream>
#include<string>
#include<queue>
using namespace std;
int main()
{
int tmp;
ifstream f("perle.in");
ofstream g("perle.out");
int n,i,nrc,j;
f>>n;
for(i=0;i<n;i++)
{
f>>nrc;
queue<char> rezultat;
bool terminat = false;
for(j=0;j<nrc;j++)
{
f>>tmp;
switch(tmp) {
case 1:
rezultat.push('1');
break;
case 2:
rezultat.push('2');
break;
case 3:
rezultat.push('3');
break;
}
}
char start = rezultat.front();
queue<char> q;
if(nrc == 0) {
g << 0 << endl;
}
else if(nrc == 1) {
g << 1 << endl;
}
else {
if(start == '1') {
if(nrc == 3) {
q.push('C');
} else {
q.push('B');
}
}
else if(start == '2') {
q.push('B');
}
while(rezultat.size() > 0)
{
if(q.size() == 0) {
g << 0 << endl;
break;
}
char current_element = q.front();
q.pop();
char c;
switch(current_element) {
case '1': case '2': case '3':
if(rezultat.front() != current_element) {
terminat = true;
} else {
rezultat.pop();
}
break;
case 'A':
rezultat.pop();
break;
case 'B':
c = rezultat.front();
if(c == '2') {
rezultat.pop();
q.push('B');
} else if(c == '1') {
rezultat.pop();
q.push('A');
q.push('3');
q.push('A');
q.push('C');
} else {
terminat = true;
}
break;
case 'C':
c = rezultat.front();
if(c == '2') {
rezultat.pop();
} else if(c == '1') {
rezultat.pop();
q.push('2');
q.push('A');
} else {
rezultat.pop();
q.push('B');
q.push('C');
}
break;
}
if(terminat) {
break;
}
}
if(rezultat.size() == 0 && q.size() == 0) {
g << 1 << endl;
} else {
g << 0 << endl;
}
}
}
f.close();
g.close();
return 0;
}