Cod sursa(job #169361)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 1 aprilie 2008 17:27:55
Problema Invers Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<cstdio>
#include<cstring>
int n,t,i;
char a[10001];
char b[10001];

int solve(int st,int dr)
{
	if(st > dr) return 0;

	while(st + 1 < dr)
	{	 
		if(b[st] > 19) return 0;
		if(b[dr] < 0) b[dr] += 10, b[dr - 1]--;

		if(b[st] == b[dr]) st++, dr--;

		else if(b[st] == b[dr] + 1) { st++; dr--; b[st] += 10;}

		else if(b[st] == b[dr] + 10) 
		{
			st++; dr--;
			if (b[dr] == 9 && b[st] == 19) return 0;
			if (b[dr > 0]) b[dr]--;
			else b[dr] = 9;
		}

		else if(b[st] == b[dr] + 11) { st++; dr--; b[dr]--; b[st] += 10;}
		else return 0;
	}
	
	if(b[st] > 19) return 0;

	if(st == dr) return b[st] % 2 == 0 && b[st] >= 0 && b[st] < 19;
	else
	{	
		if(b[dr] < 0) 
		{
			b[dr] += 10,b[st]--;
			if(b[st] == b[dr]) return 1;
			else return 0;
		}
		else
			if(b[st] == b[dr]) return 1;
			else if(b[st] - 11 == b[dr]) return 1;
			else return 0;
	}
}

int main()
{
	freopen("invers.in","r",stdin);
	freopen("invers.out","w",stdout);
	scanf("%d ",&t);
	while(t--)
	{
		scanf(" %s ",a);
		n = strlen(a);
		for(i = 0; i < n; i++) {a[i] -= '0'; b[i] = a[i];}

		if(solve(0, n - 1)) goto da;
		else if(a[0] == 1)
		{
			memcpy(b, a, sizeof(a));
			b[1] += 10;
			if(solve(1, n - 1)) goto da;
			else goto nu;
		}
		else goto nu;
da:
		printf("DA\n");
		continue;
nu:
		printf("NU\n");
	}
	fclose(stdout);
	return 0;
}