Cod sursa(job #3914)

Utilizator ionescu_bogdanIonescu Bogdan-Gabriel ionescu_bogdan Data 29 decembrie 2006 16:18:04
Problema Invers Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define cm 10010

char sir[cm];
int t,s,d,v[cm],vld;

int main()
{
	freopen("invers.in","r",stdin);
	freopen("invers.out","w",stdout);

	scanf("%d\n",&t);
	for (;t;--t)
	{
		scanf("%s\n",sir);
		d=strlen(sir)-1;
		for (s=0;s<=d;s++)
			v[s]=sir[s]-'0';
		s=0,vld=1;
		while (d-s>1)
		{
			if (v[s]==v[d])
			{
				++s,--d;
				continue;
			}
			if (v[s]==v[d]+1)
			{
				v[s+1]+=10;
				++s,--d;
				continue;
			}
			if (v[s]==v[d]+10)
			{
/*				if (v[d-1]==0)
				{
					vld=0;
					break;
				}
				else    */
					v[d-1]--;
				++s,--d;
				continue;
			}
			if (v[s]==v[d]+11)
			{
				v[s+1]+=10;
/*				if (v[d-1]==0)
				{
					vld=0;
					break;
				}
				else*/
					v[d-1]--;
				++s,--d;
				continue;
			}
			vld=0;
			break;
		}
		if (s==d)
			if (v[s]%2==1)
				vld=0;
		if (s==d-1)
			if ((v[s]!=v[d])&&(v[s]!=v[d]+11))
				vld=0;

		if ((v[0]==1)&&(vld==0)&&(strlen(sir)>1))
		{
			s=1,d=strlen(sir)-1,v[1]+=10;
			vld=1;
			while (d-s>1)
		{
			if (v[s]==v[d])
			{
				++s,--d;
				continue;
			}
			if (v[s]==v[d]+1)
			{
				v[s+1]+=10;
				++s,--d;
				continue;
			}
			if (v[s]==v[d]+10)
			{
/*				if (v[d-1]==0)
				{
					vld=0;
					break;
				}
				else  */
					v[d-1]--;
				++s,--d;
				continue;
			}
			if (v[s]==v[d]+11)
			{
				v[s+1]+=10;
/*				if (v[d-1]==0)
				{
					vld=0;
					break;
				}
				else*/
					v[d-1]--;
				++s,--d;
				continue;
			}
			vld=0;
			break;
		}
		if (s==d)
			if (v[s]%2==1)
				vld=0;
		if (s==d-1)
			if ((v[s]!=v[d])&&(v[s]!=v[d]+11))
				vld=0;

		}

		if (vld==0)
			printf("NU\n");
		else
			printf("DA\n");
	}

	return 0;
}