Pagini recente » Cod sursa (job #1852544) | Cod sursa (job #880933) | Cod sursa (job #1461924) | Cod sursa (job #1283094) | Cod sursa (job #2815656)
#include <iostream>
#include <fstream>
#include <string>
#define MAX 20002
using namespace std;
string s = "";
int n,l,v[MAX],k,sol;
/**
A -> 1 | 2 | 3
B -> 2B | 1A3AC
C -> 2 | 3BC | 12A
**/
ifstream fin("perle.in");
ofstream fout("perle.out");
bool rezolva(string s, int n){
for (int i = 0; i < s.size(); i++){
if (s[i] == 'A'){
s[i] = v[i+1]+'0';
}else if(s[i] == 'B'){
s.erase(i, 1);
if (v[i+1] == 1){
s.insert(i, "1A3AC");
}else if (v[i+1] == 2){
s.insert(i, "2B");
}
}else if(s[i] == 'C'){
s.erase(i, 1);
if (v[i+1] == 1){
s.insert(i, "12A");
}else if (v[i+1] == 2){
s.insert(i, "2");
}else if (v[i+1] == 3){
s.insert(i, "3BC");
}
}
if ((s[i]-'0') != v[i+1] || s.size() > n){
return false;
}
}
if (s.size() == n)
return true;
return false;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++){
fin >> l;
for(int j = 1; j <= l; j++){
fin >> v[j];
}
/// aici intra rezolvarea
/// NOTE: un sir nu poate incepe nicio data cu A
/// daca incepe cu A sirul va avea lungimea = 1
if(l == 1){
fout << "1\n";
continue;
}
fout << (rezolva("B", l) || rezolva("C", l)) << "\n";
}
return 0;
}