Cod sursa(job #56376)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 29 aprilie 2007 14:42:24
Problema Invers Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#define fin  "invers.in"
#define fout "invers.out"
#define Nmax 10002

int T,dim;
char v[Nmax];

int absf(int a) {
	if (a<0)
		a*=-1;
	return a;
}

int main() {
int i,j,good;
	freopen(fin,"r",stdin); freopen(fout,"w",stdout);

	scanf("%d",&T);

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

		for (dim=0;v[dim]!=(char)NULL;++dim)
			v[dim]-='0';
		
		dim--;

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

		if (v[0]==1 && dim>1) {
			v[1]+=10;
			i=1;
		}
		else 
			i=0;

		j=dim;

		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 ( v[i] == v[j] + 1 ) 
				v[i+1]+=10;
			else
				if ( v[i] == v[j] + 10 ) {

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

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

						v[j-1]--;

						//if (v[j-1]<0)
						//	v[j-1]=9;

						v[i+1]+=10;
					}

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

							good=0;
			//fprintf(stderr,"%d %d\n",i,j);
		}

		if (good)
			printf("DA\n");
		else
			printf("NU\n");

	}	

	fclose(stdin); fclose(stdout);

	return 0;
}