Pagini recente » Cod sursa (job #1617079) | Cod sursa (job #1681090) | Istoria paginii runda/oni_5/clasament | Cod sursa (job #1584428) | Cod sursa (job #1229079)
#include <cstdio>
#include <iostream>
#include <string>
#define nmax 10005
int n, a[nmax], b[nmax];
using namespace std;
bool solve(int st, int dr)
{
int dc;
while (1) {
if (st == dr) return (1 - (a[st] % 2));
if (st == dr - 1) return (a[st] == a[dr] || a[st] == a[dr] + 11);
dc = a[st] - a[dr];
if (dc != 0 && dc != 1 && dc != 10 && dc != 11) return 0;
if (dc == 1 || dc == 11) a[st + 1] += 10;
if (dc >= 10) {
if (a[dr] == 9) return 0;
int i;
for (i = dr - 1; a[i] == 0; -- i)
a[i] = 9;
a[i] --;
if (i == st) return 0;
}
++ st;
-- dr;
}
}
int main()
{
freopen("invers.in", "r", stdin);
freopen("invers.out", "w", stdout);
int t ;
scanf("%d", &t);
for (;t> 0; --t)
{
string s;
getline(cin,s);
n = 0;
for (int i = 0; s[i]; ++ i) {
++ n;
a[n] = b[n] = s[i] - '0';
}
if (n == 1) {
if (a[1] % 2 == 1) {
printf("NU\n");
continue;
}
printf("DA\n");
continue;
}
if (a[n] > 0)
if (solve(1, n)) {
printf("DA\n");
continue;
}
if (a[1] != 1) {
printf("NU\n");
continue;
}
for (int i = 1; i < n; ++ i)
a[i] = b[i + 1];
a[1] += 10;
if (solve(1, n - 1))
printf("DA\n");
else
printf("NU\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}