Cod sursa(job #169965)

Utilizator razvi9Jurca Razvan razvi9 Data 2 aprilie 2008 11:45:48
Problema Invers Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<cstdio>
#include<cstring>
int n,t,i,st;
char a[50001],b[50001];
int solve(int st,int dr)
{
	if(st>dr) return 0; 
	while(st+1<dr)
	{
		if(b[st]>19) return 0;
		if(b[dr]<0) {b[dr]+=10;b[dr-1]--;}
		if(b[st]==b[dr]) {st++;dr--;}
		else
			if(b[st]-1==b[dr]){st++;dr--;b[st]+=10;}
			else
				if(b[st]<=18 && 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(b[st]>19) return 0;
	if(st==dr) return a[st]%2==0 && a[st]>=0 && a[st]<=18;
	else{
		if(b[dr]<0) {
			b[dr]+=10,b[st]--;
			if(b[st==b[dr]) return 1;
			else return 0;}
		if(b[st]<0 || b[st]>19) return 0;
		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--){
		scanf(" %s ",a);
		n=strlen(a);
		for(i=0;i<n;i++){a[i]-='0';b[i]=a[i];}
		st=0;
		while(a[st]==0 && st<n) st++;
		if(st==n) st--;
		if(solve(st,n-1)) 
			goto da;
		else
			if(a[st]==1){
				memcpy(b,a,sizeof(b));
				st++;
				b[st]+=10;
				if(solve(st,n-1)) 
					goto da;
				else
					goto nu;
			}
			else
				goto nu;
da:
		printf("DA\n");
		continue;
nu:
		printf("NU\n");
	}
	fclose(stdout);
	return 0;
}