Pagini recente » Cod sursa (job #703361) | Cod sursa (job #2581268) | Cod sursa (job #2519429) | Cod sursa (job #11382) | Cod sursa (job #218150)
Cod sursa(job #218150)
#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 && S[dr]<20) return 1;
return 0;
}
if (S[st] < -1 || S[dr] < -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;
}
if (S[dr]<10)
{
//a+b=C
if (S[st] == S[dr]) continue;
//a+b=C si primeste din st+1
if (S[st] == S[dr]+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;
}
else
{
//a+b=10+C
if (S[st] == S[dr]) continue;
//a+b=10+C si primeste din st+1
if (S[st] == 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;
}