Pagini recente » Cod sursa (job #3199715) | Cod sursa (job #1918928) | Cod sursa (job #2640751) | Cod sursa (job #1598779) | Cod sursa (job #207203)
Cod sursa(job #207203)
#include <stdio.h>
int nTests;
int n;
int a[10010];
int k;
int parseA() {
if (k >= n) {
return 0;
}
k++;
return 1;
}
int parseTerm(int value) {
if (k >= n || a[k] != value) {
return 0;
}
k++;
return 1;
}
int parseC(); // forward declaration
int parseB() {
if (k >= n) {
return 0;
}
switch (a[k]) {
case 1:
return parseTerm(1) && parseA() && parseTerm(3) && parseA() && parseC();
case 2:
return parseTerm(2) && parseB();
default:
return 0;
}
}
int parseC() {
if (k >= n) {
return 0;
}
switch (a[k]) {
case 1:
return parseTerm(1) && parseTerm(2) && parseA();
case 2:
return parseTerm(2);
case 3:
return parseTerm(3) && parseB() && parseC();
default:
return 0;
}
}
int parseS() {
if (n == 1) {
return 1;
}
k = 0;
int result = parseB();
if (result && k == n) {
return 1;
}
k = 0;
result = parseC();
if (result && k == n) {
return 1;
}
return 0;
}
int main() {
FILE* fin = fopen("perle.in", "rt");
FILE* fout = fopen("perle.out", "wt");
fscanf(fin, "%d", &nTests);
for (;nTests; nTests--) {
fscanf(fin, "%d", &n);
for (int i = 0; i < n; i++) {
fscanf(fin, "%d", &a[i]);
}
int result = parseS();
fprintf(fout, "%d\n", result);
}
fclose(fin);
fclose(fout);
return 0;
}