TopCoder SRM 342 Div1 Easy TagalogDictionary

問題

タガログ語のアルファベットは、順に
a b k d e g h i l m n ng o p r s t u w y
である。


与えられたタガログ語の文字列を、
タガログ語での辞書順でソートせよ。


ただし、ngは、必ずアルファベットngとして扱うものとする。

制約条件

文字列の個数≦50
各文字列の長さ≦50

方針

各文字の番号をvectorに入れて、vector同士を<演算子で比較してやればよい。

ソースコード

const char *a="a b k d e g h i l m n ng o p r s t u w y";
map<string,int> m;
bool cmp(string a,string b){
	vi aa,bb;
	rep(i,a.size()){
		if(a.substr(i,2)=="ng")aa.pb(m["ng"]), i++;
		else aa.pb(m[string(1,a[i])]);
	}
	rep(i,b.size()){
		if(b.substr(i,2)=="ng")bb.pb(m["ng"]), i++;
		else bb.pb(m[string(1,b[i])]);
	}
	return aa<bb;
}

class TagalogDictionary {
	public:
	vector <string> sortWords(vector <string> words) 
	{
		string s(a);
		stringstream ss(s);
		int k=0;
		while(ss>>s)m[s]=k++;
		sort(all(words),cmp);
		return words;
	}
};