Pagini recente » Cod sursa (job #2849277) | Cod sursa (job #1641627) | Cod sursa (job #1830058) | Cod sursa (job #2189882) | Cod sursa (job #1188525)
#include <fstream>
#include <string>
bool test(std::string s){
if(s[0]=='1'&&s[s.size()-1]=='0') return false;
else if(s.size()==1) return !((s[0]-'0')&1);
else{
unsigned l=0,r=s.size()-1;
unsigned possible=true;
while(possible&&l<=r){
if(l==r) possible=((s[l]-'0')&1)==0;
else if(l+1==r){
if(s[l]!=s[r]&&s[l]!=s[r]+11) possible=false;
}
else if(s[l]==s[r]);
else if(s[l]==s[r]+1) s[l+1]+=10;
else if(s[l]-s[r]==10){
if(s[r]=='9') possible=false;
else if(s[r-1]=='0'){
unsigned r2;
for(r2=r-1;s[r2]=='0';--r2);
if(r2==l) possible=false;
s[r2]--; ++r2; for(;r2<r;++r2) s[r2]='9';
}
else --s[r-1];
}
else if(s[l]-s[r]==11){
s[l+1]+=10;
if(s[r]=='9') possible=false;
else if(s[r-1]=='0'){
unsigned r2;
for(r2=r-1;s[r2]=='0';--r2);
if(r2==l) possible=false;
s[r2]--; ++r2; for(;r2<r;++r2) s[r2]='9';
}
else --s[r-1];
}
else possible=false;
++l; --r;
}
return possible;
}
}
int main(){
std::ifstream fin("invers.in");
std::ofstream fout("invers.out");
int T; fin>>T;
while(T--){
std::string s; fin>>s;
bool retval=false;
if(s.size()>1&&s[0]=='1'){
std::string s2(s,1);
s2[0]+=10;
retval=test(s2);
}
if(!retval) retval=test(s);
if(retval) fout<<"DA\n";
else fout<<"NU\n";
}
}