Project Euler Problem 125
単なるブルートフォースなのだが、範囲が違うけど同じ数が出うることと、それを加算してはいけないことに1時間ハマって死にたい。何この凡ミス。
typedef unsigned long long int nat; vector<nat> gensqsq(nat lim){ vector<nat> sqsq; for(nat i=1;i*i <= lim;++i)sqsq.push_back(i*i); return sqsq; } bool ispalindromic( nat n ){ if( n >= 10 && n % 10 == 0 ) return false; deque<int> d; while( n ){ d.push_front( n % 10 ); n /= 10; } for( int i=0, j=d.size()-1; i <= j; ++i, --j ){ if( d[i] != d[j] ) return false; } return true; } nat pe125(){ set<nat> s; nat limit = 100000000; nat total = 0; vector<nat> sq = gensqsq(limit); for( nat from = 0; from < sq.size(); ++from){ nat seqsum = 0; for(nat to=from; to < sq.size(); ++to ){ seqsum += sq[(unsigned int )to]; if( to == from ) continue; if( seqsum >= limit )break; if( ispalindromic( seqsum ) ) s.insert( seqsum ); } } for( set<nat>::iterator itr = s.begin(); itr != s.end(); ++itr ) total += *itr; return total; }