Cod sursa(job #170832)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 3 aprilie 2008 12:28:43
Problema Invers Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.03 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int ok, ok2, N, n;
char A[10002], B[10002];

int calcul()
{
	int i, j, k, nr = 1;
	i = ok2; j = N - 1;

	while ( nr )
	{
		if ( i==j )
		{
			if ( !(A[i] % 2) ) { nr = 0; ok = 1; break; }
			else { nr = 0; break; }
		}
		
		if ( i + 1 == j )
		{
			if ( A[i] == A[j] || A[i] == A[j] + 11 )
			{
				nr = 0; ok = 1; break;
			}
			else { nr = 0; break; }
		}
		
		if ( A[i] == A[j] )
		{
			i++; j--;
		}
		
		else if ( A[i] == A[j] + 1 )
		{
			A[i + 1] += 10;
			i++;
			j--;
		}
		
		else if ( A[i] == A[j] + 10 )
		{
			if (A[j] == 9) { nr = 0; break; }
			k = j - 1;

			while (k >= i) 
			{ 
				if (A[k] == 0) A[k--] = 9; else { A[k]--; break; } 
			}
			if (k == i) { nr = 0; break; }
			i++; j--;
		}

		else if ( A[i] == A[j] + 11 )
		{
			A[i + 1] += 10;
			k = j - 1;
			if (A[j] == 9) { nr = 0; break; }
			while (k >= i)
			{
				if (A[k] == 0) A[k--] = 9; else { A[k]--; break; }
			}
			if (k == i) { nr = 0; break; }
			i++; j--;
		}
		
		else nr = 0;
		
	}
	return 0;
}

int main()
{
	int i, viz;
	freopen("invers.in", "r", stdin);
	freopen("invers.out", "w",stdout);
	scanf("%d",&n);

	while (n--)
	{
		viz = 1;
		i = ok = 0;
		
		scanf("%s ",A);
		N = strlen(A);
		
		if (A[0] == '0') break; 
		
		for (i = 0; i < N; i++) 
		{
			A[i] = A[i] - '0';
		}
				
		ok2=0; 
		
		if (N == 1) 
		{
			if (A[0] % 2 == 0) ok = 1;
		}
		else if (N == 2)
		{
			if (A[0] == A[1]) ok = 1;
			else if (A[0] == 1 && (A[0] * 10 + A[1]) % 2 == 0) ok = 1;
		}
		
		else 
		{
			if ( A[0] == 1 ) 
			{
				viz = 1;
				if ( A[0] == 1 && A[N - 1] == 0 ) viz = 0;
				
				for (i = 0; i < N; i++) 
				{
					B[i] = A[i];
				}
				
				A[1] += 10;				
				ok2 = 1;

				calcul();

				if (!ok && viz )
				{
					ok2 = 0;
					
					for (i = 0; i < N; i++) A[i] = B[i]; 
					calcul();
				}
			}
			else calcul();
		}
		if ( ok ) printf("DA\n"); else printf("NU\n");
	}
	return 0;
}