Cod sursa(job #168546)

Utilizator razvi9Jurca Razvan razvi9 Data 31 martie 2008 16:49:06
Problema Invers Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<cstdio>
#include<cstring>
int n,t,i;
char a[10001];
char b[10001];
int solve(int st,int dr)
{
 while(st+1<dr){
	 if(b[dr]<0){b[dr]=9;b[dr-1]--;}
	 if(b[st]>19) return 0;
	 if(b[st]==b[dr]) st++,dr--;
	 else
		 if(b[st]-1==b[dr]){st++;dr--;b[st]+=10;}
		 else
			 if(b[st]<19 && b[dr]<9 && b[st]-10==b[dr]){st++;dr--;b[dr]--;}
			 else
				 if(b[st]-11==b[dr]){st++;dr--;b[dr]--;b[st]+=10;}
				 else
					 return 0;
 }
 
 if(st==dr) return b[st]%2==0;
 else{
	 if(b[dr]<0) b[dr]=9,b[st]--;
	 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);
	for(;t;t--){
		gets(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;
}