Pagini recente » Cod sursa (job #701765) | Cod sursa (job #2170426) | Cod sursa (job #2625011) | Cod sursa (job #2107017) | Cod sursa (job #560700)
Cod sursa(job #560700)
#include<stdio.h>
#include<malloc.h>
typedef struct _nod
{
short int info;
struct _nod *adr;
} nod;
int N;
int M;
short int V[10002];
void add(int i,nod*& Ci)
{
nod *nou = (nod*)malloc(sizeof(nod));
nou->info = i;
nou->adr = Ci;
Ci = nou;
}
int incercare(void)
{
nod *q;
if(M == 1)
return 1;
else if(M == 2)
return 0;
else if(M == 3)
{
if(V[1] == 1 && V[2] == 2)
return 1;
else
return 0;
}
else if(M == 4)
return 0;
else
{
nod *Ci = NULL;
int i = 1;
if(V[i] == 1 && V[i+2] == 3)
{
add(3,Ci);
i += 4;
}
else if(V[i] == 2)
{
add(2,Ci);
i ++;
}
else if(V[i] == 3)
{
add(3,Ci);
add(2,Ci);
i ++;
}
else return 0;
while(Ci && i<M)
{
q = Ci;
if(V[i] == 1 && V[i+2] == 3 && Ci->info == 2)
{
Ci = Ci->adr;
free(q);
add(3,Ci);
i += 4;
}
else if(V[i] == 2 && Ci->info == 2)
{
Ci = Ci->adr;
free(q);
add(2,Ci);
i ++;
}
else if(V[i] == 3 && Ci->info == 3)
{
Ci = Ci->adr;
free(q);
add(3,Ci);
add(2,Ci);
i ++;
}
else if(V[i] == 1 && V[i+1] == 2 && Ci->info == 3)
{
Ci = Ci->adr;
free(q);
i += 3;
}
else if(V[i] == 2 && Ci->info == 3)
{
Ci = Ci->adr;
free(q);
i ++;
}
else return 0;
}
if(!Ci || i>M)
return 1;
else
return 0;
}
}
void citire(void)
{
FILE *f = fopen("perle.in","r");
FILE *g = fopen("perle.out","w");
fscanf(f,"%d ",&N);
for(int i=1;i<=N;i++)
{
fscanf(f,"%d",&M);
for(int j=1;j<=M;j++)
fscanf(f,"%d",&V[j]);
fprintf(g,"%d\n",incercare());
}
fclose(g);
fclose(f);
}
int main()
{
citire();
return 0;
}