Pagini recente » Cod sursa (job #2964873) | Cod sursa (job #3165897) | Cod sursa (job #620887) | Cod sursa (job #2593607) | Cod sursa (job #218140)
Cod sursa(job #218140)
#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 dr+1
S[dr-1]-=1;
//a+b=9 si primeste din st+1
if (S[st] == 10) S[st+1]+=10;
else if (S[st]!=9) return 0;
continue;
}
if (S[dr] == 0)
{
//a=b=0
if (S[st] == 0) continue;
if (S[st] == 1) { S[st+1]+=10; continue; }
//a+b=10
if (S[st] == 11) { --S[dr-1];S[st+1]+=10;continue; }
else if (S[st] == 10) { --S[dr-1];continue; }
else return 0;
}
else 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;
}