Cod sursa(job #1373482)
Utilizator | Data | 4 martie 2015 18:59:48 | |
---|---|---|---|
Problema | Perle | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.22 kb |
#include <fstream>
#include <string.h>
using namespace std;
#define lgMax 10000
int lg;
char s[lgMax], temp[lgMax + 15];
bool transf(char) ;
int main()
{
int i, j, n, perla, ok;
freopen("perle.in", "r", stdin);
freopen("perle.out", "w", stdout);
scanf("%d", &n);
for(i = 0; i < n; ++i)
{
scanf("%d", &lg);
for(j = 0; j < lg; ++j) scanf("%s ", s + j);
ok = 0;
for(perla = 0; perla < 3 && !ok; ++perla)
if(transf(char('A' + perla))) ok = 1;
if(ok) printf("1\n");
else printf("0\n");
}
return 0;
}
bool transf(char c)
{
int lgTemp = 1, i, j;
for(temp[0] = c, j = 0; j < lgTemp; ++j)
{
if(s[j] == temp[j]) continue;
if('1' <= temp[j] && temp[j] <= '3') return 0;
if('A' <= s[j] && s[j] <= 'C') return 0;
if(lgTemp > lg) return 0;
switch(temp[j])
{
case 'A': temp[j] = s[j]; break;
case 'B':
{
switch(s[j])
{
case '1':
{
if(lgTemp + 4 > lg) return 0;
else
{
for(i = lgTemp - 1; i > j; --i) temp[i + 4] = temp[i];
strcpy(temp + j, "1A3AC");
lgTemp += 4;
}
break;
}
case '2':
{
if(lgTemp + 1 > lg) return 0;
else
{
for(i = lgTemp - 1; i > j; --i) temp[i + 1] = temp[i];
strcpy(temp + j, "2B");
lgTemp++;
}
break;
}
case '3': return 0;
}
break;
}
case 'C':
{
switch(s[j])
{
case '1':
{
if(lgTemp + 2 > lg) return 0;
else
{
for(i = lgTemp - 1; i > j; --i) temp[i + 2] = temp[i];
strcpy(temp + j, "12A");
lgTemp += 2;
}
break;
}
case '2':
{
temp[j] = '2';
break;
}
case '3':
{
if(lgTemp + 2 > lg) return 0;
else
{
for(i = lgTemp - 1; i > j; --i) temp[i + 2] = temp[i];
strcpy(temp + j, "3BC");
lgTemp++;
}
break;
}
}
break;
}
}
}
if(lgTemp == lg) return 1;
return 0;
}