Pagini recente » Cod sursa (job #2029081) | Cod sursa (job #2821139) | Cod sursa (job #2537019) | Cod sursa (job #2662128) | Cod sursa (job #3005240)
#include <iostream>
#include <fstream>
#include <vector>
#define MAXL 10000
using namespace std;
int v[MAXL], l;
bool solve(int id, vector<char> s){
if(s.size() == 0){
if(id == l)
return 1;
return 0;
}
if(id == l)
return 0;
bool r = false;
char c = s[s.size() - 1];
s.pop_back();
if(c == 'B'){
if(v[id] == 2){ // 2B
s.push_back('B');
r |= solve(id + 1, s);
}
if(l >= id + 5 && v[id] == 1 && v[id + 2] == 3){ // 1A3AC
s.push_back('C');
r |= solve(id + 4, s);
}
} if(c == 'C'){
if(v[id] == 2) // 2
r |= solve(id + 1, s);
if(l >= id + 3 && v[id] == 3){ // 3BC
s.push_back('C');
s.push_back('B');
r |= solve(id + 1, s);
s.pop_back();
s.pop_back();
}
if(l >= id + 3 && v[id] == 1 && v[id + 1] == 2)
r |= solve(id + 3, s);
}
return r;
}
bool start(){
if(l == 1)
return 1;
bool r;
vector<char> s;
if(v[0] == 3){
s.push_back('C');
s.push_back('B');
r = solve(1, s);
} else if(v[0] == 2){
s.push_back('B');
r = solve(1, s);
s.pop_back();
} else if(v[0] == 1){
if(l == 3 && v[1] == 2)
return 1;
if(l < 5 || v[2] != 3)
return 0;
s.push_back('C');
r |= solve(4, s);
s.pop_back();
}
return r;
}
int main(){
int n, i, j;
FILE *fin, *fout;
fin = fopen("perle.in", "r");
fout = fopen("perle.out", "w");
fscanf(fin, "%d", &n);
for(i = 0; i < n; i ++){
fscanf(fin, "%d", &l);
for(j = 0; j < l; j ++){
fscanf(fin, "%d", &v[j]);
}
fprintf(fout, "%d\n", start());
}
fclose(fin);
fclose(fout);
return 0;
}