Cod sursa(job #1797348)
| Utilizator | Data | 4 noiembrie 2016 11:46:50 | |
|---|---|---|---|
| Problema | Perle | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 6.35 kb |
#include <stdio.h>
#define MAX_LENGTH 10005
FILE* fin;
FILE* fout;
int crtLgh;
int n;
int nre[MAX_LENGTH] = { 0 };
int mySir[MAX_LENGTH] = { 0 };
void LoadFiles()
{
fin = fopen("perle.in", "r");
fout = fopen("perle.out", "w");
}
void Init()
{
LoadFiles();
}
void ReadSir()
{
for(int i=0;i<crtLgh;i++)
{
fscanf(fin, "%d", &nre[i]);
mySir[i] = 0;
}
}
bool ProcessSir()
{
int ramase = crtLgh;
bool first = true;
bool finished = false;
int crtIndex = 0;
while(!finished)
{
ramase = crtLgh - crtIndex;
if(ramase == 1 || ramase == 0)
{
return true;
}
else
{
if(first && mySir[crtIndex] == 0)
{
if(ramase == 3 && nre[crtIndex] == 1 && nre[crtIndex+1] == 2)
{
return true;
}
else
{
if(ramase >= 3 && nre[crtIndex] == 3)
{
mySir[crtIndex] = 2;
mySir[crtIndex + 1] = 'B';
mySir[crtIndex + 2] = 'C';
}
else
{
if(ramase >= 2 && nre[crtIndex] == 2)
{
mySir[crtIndex] = 2;
mySir[crtIndex+1] = 'B';
}
else
{
if(ramase >= 5 && nre[crtIndex] == 1)
{
mySir[crtIndex] = 1;
mySir[crtIndex + 1] = 'A';
mySir[crtIndex + 2] = 3;
mySir[crtIndex + 3] = 'A';
mySir[crtIndex + 4] = 'C';
}
else
{
return false;
}
}
}
}
first = false;
crtIndex++;
}
else
{
if(!first)
{
return false;
}
}
if(mySir[crtIndex] != 0)
{
if(mySir[crtIndex] == nre[crtIndex])
{
crtIndex++;
}
else
{
if(mySir[crtIndex] == 'A')
{
crtIndex++;
}
else
{
if(mySir[crtIndex] == 'B')
{
bool hasC = (mySir[crtIndex+1] == 'C');
if(nre[crtIndex] == 2)
{
mySir[crtIndex+1] = 'B';
crtIndex++;
if(hasC)
{
mySir[crtIndex+1] = 'C';
}
}
else
{
if(nre[crtIndex] == 1)
{
mySir[crtIndex+1] = 'A';
mySir[crtIndex+2] = 3;
mySir[crtIndex+3] = 'A';
mySir[crtIndex+4] = 'C';
if(hasC)
{
mySir[crtIndex+5] = 'C';
}
crtIndex++;
}
else
{
printf("DA\n");
return false;
}
}
}
else
{
if(mySir[crtIndex] == 'C')
{
if(ramase == 1 && nre[crtIndex] == 2)
{
return true;
}
else
{
if(nre[crtIndex] == 3)
{
mySir[crtIndex + 1] = 'B';
mySir[crtIndex + 2] = 'C';
crtIndex++;
}
else
{
if(nre[crtIndex] == 1)
{
printf("DA\n");
mySir[crtIndex + 1] = 2;
mySir[crtIndex + 2] = 'A';
crtIndex++;
}
else
{
printf("DA\n");
return false;
}
}
}
}
}
}
}
}
else
{
printf("DA\n");
return false;
}
}
}
}
void Read()
{
fscanf(fin, "%d", &n);
for(int i=0;i<n;i++)
{
fscanf(fin, "%d", &crtLgh);
ReadSir();
printf("",ProcessSir());
}
}
void CloseFiles()
{
fclose(fin);
fclose(fout);
}
void Terminate()
{
CloseFiles();
}
int main(void)
{
Init();
Read();
Terminate();
return 0;
}
