王の名前とN世が文字列で与えられるので、王の名前とローマ数字の昇順にソートして返す問題。
ローマ数字→intのルーチンで一桁目が 0 の場合に何も返してなくて failed system test. ぬるい。
手元のコンパイルのとき -Wall くらい付けたほうがいいな。
(あとで通したもの)
class KingSort { public: int ord(string s) { //The Roman numerals for 1 through 10 are I, II, III, IV, V, VI, VII, VIII, IX, and X. //The Roman numerals for 20, 30, 40, and 50 are XX, XXX, XL, and L. if(s.substr(0,1)=="L") return 50+ord(s.substr(1)); if(s.substr(0,2)=="XL") return 40+ord(s.substr(2)); if(s.substr(0,3)=="XXX") return 30+ord(s.substr(3)); if(s.substr(0,2)=="XX") return 20+ord(s.substr(2)); if(s.substr(0,1)=="X") return 10+ord(s.substr(1)); if(s.substr(0,2)=="IX") return 9; if(s.substr(0,4)=="VIII") return 8; if(s.substr(0,3)=="VII") return 7; if(s.substr(0,2)=="VI") return 6; if(s.substr(0,1)=="V") return 5; if(s.substr(0,2)=="IV") return 4; if(s.substr(0,3)=="III") return 3; if(s.substr(0,2)=="II") return 2; if(s.substr(0,1)=="I") return 1; return 0; // <- これ! } vector <string> getSortedList(vector <string> kings) { vector<pair<pair<string, int>, string> > w; REP(i, kings.size()) { stringstream ss(kings[i]); string name, o; ss>>name>>o; w.push_back(make_pair(make_pair(name, ord(o)), kings[i])); } sort(ALL(w)); vector<string> ans(w.size()); REP(i, w.size()) ans[i]=w[i].second; return ans; }