Pagini recente » Cod sursa (job #72763) | Cod sursa (job #2722774) | Cod sursa (job #2709345) | Cod sursa (job #1149507) | Cod sursa (job #218301)
Cod sursa(job #218301)
#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];
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]!=9)) { --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;
}