Cod sursa(job #58550)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 6 mai 2007 12:54:23
Problema Invers Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <stdio.h>
#define fin  "invers.in"
#define fout "invers.out"
#define Nmax 10002

int T,dim;
char a[Nmax];

void steal(int p,char v[]) {
	v[p]--;
	if (v[p]<0) {
		v[p]=9;
		if (p>0) steal(p-1,v);
	}
}

int test(int i,int j,char v[]) {
int good;	

		for (good=1;i<=j && good;++i,--j) {
			
			//fprintf(stderr,"%d %d\n",v[i],v[j]);

			if (i==j && v[i]%2!=0)
				good=0;

			if (i+1==j && v[i]!=v[j] && v[i]!=v[j]+11)
				good=0;

			if ( v[i] == v[j] + 1 ) 
				v[i+1]+=10;
			else
				if ( v[i] == v[j] + 10 ) {

					if ( v[i]==19 )
						good=0;

					steal(j-1,v);
					
				}
				
				else
					if ( v[i] == v[j] + 11 ) {
						
						if ( v[i]==19 )
							good=0;

						v[i+1]+=10;

						steal(j-1,v);

					}

					else
						if ( v[i] != v[j] )

							good=0;
		}

		return good;
}

int main() {
int good;
char tmp[Nmax];

	freopen(fin,"r",stdin); freopen(fout,"w",stdout);

	scanf("%d",&T);

	for (;T>0;--T) {
		
		scanf("%s",&a);	

		for (dim=0;a[dim]!=(char)NULL;++dim) {
			a[dim]-='0';
			tmp[dim]=a[dim];
		}
				
		dim--;

		//fprintf(stderr,"%d\n",dim);

		if (a[0]==1 && a[dim]==1) {
			a[1]+=10;
			good=test(1,dim,a);
			//if (!good)
			//	good=test(0,dim,tmp);
		}
		else 
			good=test(0,dim,a);

		
		if (good) {
			//for (int i=0;i<dim;++i)
			//	printf("%d ",tmp[i]);

			printf("DA\n");
		}
		else
			printf("NU\n");

	}	

	fclose(stdin); fclose(stdout);

	return 0;
}