2009-02-08
拙作bignumライブラリを使って昨日のMedium問題を解いてみる
library | |
string replace(const string s, int a, int b){ stringstream ss; int l=s.size(); for(int i=0;i<l;i++){ int c=s[i]; ss << (char)((c==a)? b : c); } return ss.str(); } char en(int c){ if (c<10) return '0'+c; else return 'A'+(c-10); } class HexatridecimalSum { public: string maximizeSum(vector<string> numbers, int k) { vector<bignum> ofs(36); rep(i,36) ofs[i]=0; bignum sum; tr(numbers,it){ string orig_str = *it; bignum b(orig_str,36); sum += b; rep(i,36){ bignum b_(replace(orig_str,en(i),'Z'),36); ofs[i] += (b_ - b); } } sort(all(ofs)); reverse(all(ofs)); rep(i,k) sum += ofs[i]; return sum.to_s(36); } };
System Testも難なく通りました。