Cod sursa(job #1188456)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 19 mai 2014 18:29:43
Problema Invers Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <string>

bool test(std::string s){
	if(s.size()==1) return !((s[0]-'0')&1);
	else{
		//for(unsigned i=0;i<s.size();++i) s[i]-='0';
		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;
				if(s[r]=='1') 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 --s[r-1];
			}
			else if(s[l]-s[r]==11){
				if(s[r]==9) possible=false;
				else --s[r-1];

				s[l+1]+=10;
			}
			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";
	}

}