Cod sursa(job #345587)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 3 septembrie 2009 18:11:08
Problema Invers Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
#define Nmax 10005

int n,t,s,d;
int v[Nmax];
char c;

void scad(int i){
	if(v[i] > 0 ) v[i]--;
   else v[i]=9, scad(i-1);
}

int merge(int x,int y){
	int s=x,d=y;
	while( ! ( s==d || d==s+1 ) ){
   	if(v[s] == v[d]) ; else
      if(v[s] == v[d]+1) v[s+1]+=10; else
      if(v[s] == v[d]+10) scad(d-1); else  // v[d-1]--;
      if(v[s] == v[d]+11) v[s+1]+=10, scad(d-1);
      else return 0;
      s++; d--;
   }
   if(s == d) if((v[s] & 1) == 0) return 1; else return 0;
   if( v[s] == v[d] || v[s]==v[d]+11 ) return 1;
   return 0;
}

int bun(){
	if( merge(1,n) ) return 1;
   v[2]+=10;   // dc prima cifra e un 1 obtinut prin transport
   if( merge(2,n) ) return 1;
   return 0;
}

int main(){
	freopen("invers.in","r",stdin);
   freopen("invers.out","w",stdout);
   scanf("%d\n",&t);
   for(; t; t--){
   	for(n=0,scanf("%c",&c); c!='\n' && !feof(stdin); scanf("%c",&c))
       v[++n]=c-'0';
      if( bun() ) printf("DA\n");
      else printf("NU\n");
   }
   fclose(stdin); fclose(stdout);
   return 0;
}