Pagini recente » Cod sursa (job #3279920) | Cod sursa (job #1549005) | Cod sursa (job #2180725) | Cod sursa (job #2418852) | Cod sursa (job #2711005)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("invers.in");
ofstream fout("invers.out");
string s;
bool check(int start, int N) {
for(int i = start, j = N - 1; i <= j; ++i, --j) {
if(i == j)
return s[i] % 2 == 0;
if(j - i == 1)
return s[i] == s[j] || s[i] == s[j] + 11;
switch(s[i] - s[j]) {
case 0:
break;
case 1:
s[i + 1] += 10;
break;
case 11:
s[i + 1] += 10;
case 10: {
if(s[j] == 9)
return false;
int k = j - 1;
--s[k];
while(s[k] < 0 && k >= i)
s[k] += 10, s[--k]--;
if(k == i)
return false;
break;
}
default:
return false;
}
}
}
bool solve() {
for(char &c : s)
c -= '0';
int N = s.size();
if(N == 1)
return s[0] % 2 == 0;
if(N == 2)
return (s[0] == s[1] || (s[0] == 1 && s[1] % 2 == 0));
if(s[0] == 1) {
string t = s;
s[1] += 10;
if(check(1, N))
return true;
if(s[0] == 1 && s[N - 1] == 0)
return false;
s = t;
return check(0, N);
}
else
return check(0, N);
}
void test_case() {
fin >> s;
fout << (solve() ? "DA\n" : "NU\n");
}
int main() {
int T;
fin >> T;
for(int tc = 0; tc < T; ++tc)
test_case();
}