Pagini recente » Cod sursa (job #1383646) | Cod sursa (job #860488) | Cod sursa (job #16061) | Cod sursa (job #266962) | Cod sursa (job #1592598)
//try #2
#include <fstream>
#include <string>
const int kMaxDigits = 10005;
bool hasProperty(int *number, int left, int right)
{
while(right-left > 1) {
if(number[left] >= 19) return false;
else if(number[left] <= 9) {
if(number[left] == number[right]+1) number[left+1] +=10;
else if(number[left] != number[right]) return false;
}
else if(number[left] == 10) {
if(number[right] == 9) number[left+1]+=10;
else if(number[right] == 0) {
number[right-1] -= 1;
}
else return false;
}
else {
if(number[left]%10 == number[right]+1) number[left+1]+=10;
else if(number[left]%10 != number[right]) return false;
number[right-1] -= 1;
}
++left;
--right;
for(int i = right; i > left && number[i] < 0; --i) {
number[i] = 9;
--number[i-1];
}
if(number[left] == -1) return false;
}
if(left == right) {
if(number[left]%2) return false;
else return true;
}
else {
if(number[left] >= 10) {
if(number[left]-number[right]-10 == number[right]) return true;
else return false;
}
else {
if(number[left] == number[right]) return true;
else return false;
}
}
return true;
}
int main()
{
std::ifstream in("invers.in");
std::ofstream out("invers.out");
std::string string_number;
int number[kMaxDigits];
int n;
in>>n;
for(int i = 0; i < n; ++i) {
bool has_property = false;
in>>string_number;
for(int j = 0; j < string_number.size(); ++j)
number[j] = static_cast<int>(string_number[j]-'0');
has_property = hasProperty(number, 0, string_number.size()-1);
if(string_number[0] == '1') {
for(int j = 0; j < string_number.size(); ++j)
number[j] = static_cast<int>(string_number[j]-'0');
number[1] += 10;
has_property = has_property || hasProperty(number, 1, string_number.size()-1);
}
if(has_property) out<<"DA\n";
else out<<"NU\n";
}
return 0;
}