Pagini recente » Cod sursa (job #598925) | Cod sursa (job #139990) | Cod sursa (job #632138) | Cod sursa (job #2380381) | Cod sursa (job #593816)
Cod sursa(job #593816)
# include <fstream>
# include <cstring>
# include <string>
using namespace std ;
const char *FIN = "invers.in", *FOU = "invers.out" ;
string S, S1 ;
int T ;
int check (int poz, int N) {
for (int i = poz, j = N, k; ; ++i, --j) {
if (i == j) {
return (S[i] & 1) == 0 ;
} else if (j - i == 1) {
return (S[i] - S[j] == 0 || (S[i] - S[j] == 11)) ;
} else {
if (S[i] - S[j] == 0) {
continue ;
} else if (S[i] - S[j] == 1) {
S[i + 1] += 10 ;
} else if (S[i] - S[j] == 10 || S[i] - S[j] == 11) {
if (S[i] - S[j] == 11) S[i + 1] += 10 ;
if (S[j] == 9) return 0;
for (--S[k = j - 1] ; k >= i && S[k] < 0 ; S[k] += 10, --S[--k]) ;
if (k - i == 0) return 0;
} else {
return 0 ;
}
}
}
}
string solve (int N) {
if (N == 0) return (S[0] & 1) ? "NU" : "DA";
else if (N == 1) return (S[0] == S[1] || (S[0] == 1 && (S[1] & 1) == 0)) ? "DA" : "NU" ;
else if (S[0] == 1) {
S1 = S, S[1] += 10 ;
if (check (1, N)) return "DA" ;
else if (S[0] == 1 && S[N] == 0) {
return "NU" ;
} else {
S = S1 ;
return check (0, N) ? "DA" : "NU" ;
}
} else {
return check (0, N) ? "DA" : "NU" ;
}
return "NU";
}
int main (void) {
ifstream f (FIN) ;
ofstream g (FOU) ;
for (f >> T; T; --T) {
f >> S ;
for (size_t i = 0, j = S.size(); i < j ; S[i++] -= '0') ;
g << solve (S.size() - 1) << '\n';
}
}