Pagini recente » Cod sursa (job #2597494) | Cod sursa (job #2115) | Cod sursa (job #1501921) | Cod sursa (job #3266980) | Cod sursa (job #66432)
Cod sursa(job #66432)
#include <stdio.h>
#include <stdlib.h>
const int N = 10000;
struct elem {
int val;
elem* nx;
};
int n,m;
int a[N];
void insert ( int ce, elem* unde ) {
elem* nxnx = (*unde).nx;
(*unde).nx = (elem*)malloc(sizeof(elem));
(*(*unde).nx).val = ce;
(*(*unde).nx).nx = nxnx;
}
int dezvolta ( int s, int a[] ) {
elem* st = (elem*)malloc(sizeof(elem));
elem* c = st;
(*c).val = s; (*c).nx = NULL;
int sch = 0;
for (int i = 0; i<n; ++i) {
switch ((*c).val) {
case 4: (*c).val = a[i]; ++sch; break;
case 5: switch (a[i]) {
case 1: insert(6,c); insert(4,c); insert(3,c); insert(4,c); (*c).val = 1; break;
case 2: insert(5,c); (*c).val = 2; break;
case 3: return 0; break;
}
++sch; break;
case 6: switch (a[i]) {
case 1: insert(4,c); insert(2,c); (*c).val = 1; break;
case 2: (*c).val = 2; break;
case 3: insert(6,c); insert(5,c); (*c).val = 3; break;
}
++sch; break;
default:if (a[i] != (*c).val) return 0;
}
if ((*c).nx == NULL && i < n-1) return 0;
elem* last = c; c = (*c).nx; free(last);
}
return (c == NULL) ? sch : 0;
}
int main() {
freopen("perle.in","r",stdin);
freopen("perle.out","w",stdout);
scanf("%d",&m);
for (int i = 0; i<m; ++i) {
scanf("%d",&n);
for (int j = 0; j<n; ++j) {
scanf("%d",&a[j]);
}
int x = dezvolta(4,a);
int y = dezvolta(5,a); if (y > x) x = y;
y = dezvolta(5,a); if (y > x) x = y;
if (x>0) x=1;
printf("%d\n",x);
}
}