Cod sursa(job #218184)

Utilizator VmanDuta Vlad Vman Data 1 noiembrie 2008 01:04:18
Problema Invers Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <cstdio>
#include <cstring>

#define Lmax 10001

int T, L, i;
char S[Lmax],SS[Lmax];

int solve(int jump)
{
 int st=-1,dr=L;

 if (jump)
        {
         st=0;
         S[1]+=10;
        }
 
 while (1)
       {
        ++st; --dr;
        if (st>dr) 
           {
            if (S[st] == S[dr]) return 1;
            return 0;
           }
        if (st==dr)
                {
                 if ((S[dr]&1)==0) return 1;
                 return 0;
                }
        if (S[dr] == -1)
                {
                 //a+b=9 si primeste din st+1
                 if (S[st] == 10) S[st+1]+=10;
                        else if (S[st]!=9) return 0;
                 //a+b=9 si primeste din dr+1
                 S[dr-1]-=1;
                 continue;
                }
         else
                {
                 //a+b=C
                 if (S[st] == S[dr]) continue;
                 //a+b=C si primeste din st+1
                 if (S[st] == S[dr]+1 && ((st!=0) || (S[st]!=1))) { S[st+1]+=10; continue; }
                 //a+b>10
                 if (S[st] == S[dr]+10) { --S[dr-1]; continue; }
                 //a+b>10 si primeste din st+1
                 if (S[st] == S[dr]+11) { --S[dr-1]; S[st+1]+=10; continue; }
                 return 0;
                }
       }
 return 1;
}

int main()
{
 freopen("invers.in","r",stdin);
 freopen("invers.out","w",stdout);
 scanf("%d\n",&T);
 while (T)
       {
        --T;
        scanf("%s\n",&S);
        L = strlen(S);
        for (i=0; i<L; ++i)
            S[i]=S[i]-'0';
        if (L==1)
                {
                 if (S[0]&1) printf("NU\n");
                        else printf("DA\n");
                }
        else
        {
        memcpy(SS,S,sizeof(S));
        if (solve(0)) printf("DA\n");
           else
           {
            memcpy(S,SS,sizeof(SS));
            if (S[0]==1 && solve(1)) printf("DA\n");
                else printf("NU\n");
           }
        }
       }
 fclose(stdout);
 return 0;
}