Pagini recente » Cod sursa (job #3208739) | Cod sursa (job #2508255) | Cod sursa (job #1360674) | Cod sursa (job #1088673) | Cod sursa (job #1591964)
#include <fstream>
#include <iostream>
#include <string>
std::string number;
bool isSatisfyingProperty(int p1, int x1, int p2, int x2)
{
// std::cout<<"DEBUG :"<<p1<<' '<<x1<<' '<<p2<<' '<<x2<<'\n';
int r = 0;
if(x2 == -1) {
x2 = 9;
r = -1;
}
if(p1 > p2) return true;
else if(p1 == p2) {
if(x1%2) return false;
else return true;
}
else {
if(x1 == 1) {
//0+1 case
if(x2 == 1 && isSatisfyingProperty(p1+1, number[p1+1]-'0', p2-1, number[p2-1]-'0')) return true;
//compound case
else {
if(p1+1 < p2) {
int aux = 10+number[p1+1]-'0';
if(aux == 10) {
if(x2 == 9) return isSatisfyingProperty(p1+1, 1, p2-1, number[p2-1]-'0'+r);
else if(x2 == 0) return isSatisfyingProperty(p1+2, number[p1+2]-'0', p2-1, number[p2-1]-'0'+r-1); //r must be 0 here, anyways
else return false;
}
else {
if(aux%10 == x2) return isSatisfyingProperty(p1+2, number[p1+2]-'0', p2-1, number[p2-1]-'0'+r-1);
else if((aux-1)%10 == x2) return isSatisfyingProperty(p1+1, 1, p2-1, number[p2-1]-'0'+r-1);
}
}
else if(p1+1 == p2) {
if(x2%2) return false;
else return true;
}
else return false;
}
}
else {
if(x1 == x2) return isSatisfyingProperty(p1+1, number[p1+1]-'0', p2-1, number[p2-1]-'0'+r);
else if(x1 == x2+1) return isSatisfyingProperty(p1, 1, p2-1, number[p2-1]-'0'+r);
else return false;
}
}
return false;
}
int main()
{
std::ifstream in("invers.in");
std::ofstream out("invers.out");
int n;
in>>n;
for(int i = 1; i <= n; ++i) {
// std::cout<<'\n';
in>>number;
if(isSatisfyingProperty(0, number[0]-'0', number.size()-1, number[number.size()-1]-'0')) out<<"DA\n";
else out<<"NU\n";
}
return 0;
}