Cod sursa(job #2595299)

Utilizator alex_benescuAlex Ben alex_benescu Data 7 aprilie 2020 15:24:21
Problema Invers Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <cstring>
using namespace std;
const int kMaxL = 10005;
ifstream fin("invers.in");
ofstream fout("invers.out");
bool Solve(const char *nr, int l, int r){
if(l > r)
return false;
if(l == 1 && nr[r] == '0')
return false;
char aux[kMaxL];
for(int i = 1; i <= r; ++i)
aux[i] = nr[i] - '0';
while (l < r) {
if(aux[l - 1] > 1)
return false;
if(aux[l - 1] == 1)
aux[l] += 10;
if (aux[l] >= aux[r] + 10) {
--aux[r - 1];
for (int i = r - 1; aux[i] == -1; --aux[--i])
aux[i] = 9;
aux[r] += 10;
}
if(aux[l] < aux[r] || aux[r] == 19)
return false;
aux[l] -= aux[r];
++l;
--r;
}
if(l == r)
return aux[l] % 2 == 0 && aux[l - 1] < 2;
return aux[r] == 0;
}
int main(){
int T;
char nr[kMaxL];
fin >> T;
while(T--){
fin >> (nr + 1);
int len = strlen(nr + 1);
if(Solve(nr, 1, len) || Solve(nr, 2, len))
fout << "DA\n";
else
fout << "NU\n";
}
return 0;
}