SRM502 Div1Easy TheLotteryBothDivs
http://community.topcoder.com/stat?c=problem_statement&pm=11359
桁数の少ないほうから見ていくだけ。そのくせコードが冗長。当選番号を反転して保存すると、substrのくだりがやりやすいと思いました。remove_ifが使えると簡潔に書けそうだけど、ラムダ式って何。eraseでもそんなに長くないしまあいっか。
#include <bits/stdc++.h> using namespace std; class TheLotteryBothDivs { public: double find( vector <string> goodSuffixes ) { vector<string> number; for(auto itr=goodSuffixes.begin();itr!=goodSuffixes.end();itr++){ string tmp=*itr; reverse(tmp.begin(),tmp.end()); number.push_back(tmp); } sort(number.begin(),number.end()); double ans=0; while(number.size()){ string num=*number.begin(); int digit=num.size(); ans+=pow(10,-digit); auto itr=number.begin(); while(itr!=number.end()){ string tmp=*itr; if(num==tmp.substr(0,digit)) itr=number.erase(itr); else itr++; } } return ans; } };
テストおわったのでしっかり精進します