Pagini recente » Borderou de evaluare (job #1138352) | Borderou de evaluare (job #2018301) | Cod sursa (job #250270) | Cod sursa (job #1965140) | Cod sursa (job #1751993)
#include <cstdio>
#include <cstring>
#define MAXN 10050
char s[MAXN];
int x[MAXN];
int solve(int st, int dr)
{
for ( ; true ; st++, dr--) {
if (st == dr)
return !(x[st] & 1);
if (st == dr - 1)
return x[st] - x[dr] == 0 || x[st] - x[dr] == 11;
int dif = x[st] - x[dr];
if (dif != 0 && dif != 1 && dif != 10 && dif != 11) return 0;
x[st+1] += 10 * (dif%10);
if (dif >= 10) {
if (x[dr] == 9) return 0;
int i;
for (i = dr - 1; x[i] == 0; i--)
x[i] = 9;
x[i]--;
if (i == st)
return 0;
}
}
return 1;
}
int solve2(int st, int dr)
{
if (x[1] != 1) return 0;
for (int i = 1; i < dr; ++i)
x[i] = s[i + 1] - '0';
x[1] += 10;
return solve(1, dr - 1);
}
int main()
{
freopen("invers.in", "r", stdin);
freopen("invers.out", "w", stdout);
int t;
scanf("%d\n", &t);
while (t--) {
gets(s + 1);
int n = strlen(s + 1);
for (int i = 1; i <= n; ++i)
x[i] = s[i] - '0';
int ok = 0;
if (x[n] > 0)
ok = solve(1, n);
ok |= solve2(1, n);
printf(ok ? "DA\n" : "NU\n");
}
return 0;
}