SRM 529 div1 easy: KingSort
だいぶ頭悪かったかも…
解法
やるだけなんですが, だいぶ頭が悪かったです。
map
vector<string> ones = {"","I","II","III","IV","V","VI","VII","VIII","IX"}; vector<string> tens = {"","X","XX","XXX","XL","L"}; for (int i = 0; i < ones.size(); i++) for (int j = 0; j < tens.size(); j++) { if (tens[j]+ones[i] == s) n = j*10+i }
とかやるのが良さそうです(適当に書いたのでコンパイル通るかわかりません)。
int parse(string s) { int ret = 0; if (s.substr(0, 1) == "X") ret = 10; if (s.substr(0, 2) == "XX") ret = 20; if (s.substr(0, 3) == "XXX") ret = 30; if (s.substr(0, 2) == "XL") ret = 40; if (s.substr(0, 1) == "L") ret = 50; if (ret == 40 || ret == 20) s = s.substr(2); else if (ret == 30) s = s.substr(3); else if (ret == 10 || ret == 50) s = s.substr(1); if (s == "I") ret += 1; if (s == "II") ret += 2; if (s == "III") ret += 3; if (s == "IV") ret += 4; if (s == "V") ret += 5; if (s == "VI") ret += 6; if (s == "VII") ret += 7; if (s == "VIII") ret += 8; if (s == "IX") ret += 9; return ret; } bool comp(const string& s, const string& t) { return parse(s) < parse(t); } class KingSort { public: vector <string> getSortedList(vector <string> kings) { map<string, vector<string> > mp; for (string s : kings) { stringstream ss(s); string name, number; ss >> name >> number; mp[name].push_back(number); } for (auto& p : mp) { sort(p.second.begin(), p.second.end(), comp); } vector<string> ret; for (auto p : mp) { for (string s : p.second) { ret.push_back(p.first + " " + s); } } return ret; }