Pagini recente » Cod sursa (job #2306837) | Cod sursa (job #2779342) | Cod sursa (job #759496) | Cod sursa (job #1406702) | Cod sursa (job #468470)
Cod sursa(job #468470)
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define MAX_N 10010
int n, T;
int sir[MAX_N];
char cover[MAX_N];
int pearl(char lit) {
memset(cover, 0, sizeof(cover));
cover[1] = lit;
int len = 1;
for (int i = 1; i <= n; i++) {
if (cover[i] == 'A')
cover[i] = '*';
if (cover[i] == 'B') {
if (sir[i] == 3)
return 0;
if (sir[i] == 2) {
for (int j = len; j >= i; j--)
cover[j + 1] = cover[j];
len += 1;
cover[i] = '*'; cover[i + 1] = 'B';
}
if (sir[i] == 1) {
for (int j = len; j >= i; j--)
cover[j + 4] = cover[j];
len += 4;
if (sir[i + 2] != 3)
return 0;
for (int j = i; j < i + 4; j++)
cover[j] = '*';
cover[i + 4] = 'C';
}
}
if (cover[i] == 'C') {
if (sir[i] == 2)
cover[i] = '*';
if (sir[i] == 3) {
for (int j = len; j >= i; j--)
cover[j + 2] = cover[j];
len += 2;
cover[i] = '*'; cover[i + 1] = 'B'; cover[i + 2] = 'C';
}
if (sir[i] == 1) {
for (int j = len; j >= i; j--)
cover[j + 2] = cover[j];
len += 2;
if (sir[i + 1] != 2)
return 0;
cover[i] = cover[i + 1] = cover[i + 2] = '*';
}
}
}
int ok = 1;
for (int i = 1; i <= n; i++)
if (cover[i] != '*')
ok = 0;
if (len == n && ok == 1)
return 1;
return 0;
}
int main() {
freopen("perle.in", "r", stdin);
freopen("perle.out", "w", stdout);
scanf("%d", &T);
for (; T; T--) {
scanf("%d", &n);
memset(sir, 0, sizeof(sir));
for (int i = 1; i <= n; i++)
scanf("%d", &sir[i]);
printf("%d\n", max(pearl('A'), max(pearl('B'), pearl('C'))));
}
return 0;
}