TopCoder SRM 374 Div1 Easy SyllableSorting

問題

Syllable sortingとは、文字列を音節に分解したものを元に文字列をソートすることを言う。
ここで、音節に分解するとは単語を、(空で無い子音が連続するものを最も長く取る)+(空で無い母音が連続するものを最も長く取る)に分割することである。



二つの文字列を比較するには、
音節に分割したそれぞれの単語の音節について、
まずアルファべット順にソートし、それぞれを辞書順による比較をして、最初に異なったものの大小で比較する。
アルファベット順にソートした音節が同じなら、ソートする前の音節で、それぞれを辞書順による比較をして、最初に異なったものの大小で比較する。


与えられた文字列の集合をSyllable sortingによって並べ替えた後の文字列の集合を返せ。

制約条件

文字列の数≦50
それぞれの文字列の文字数≦50

方針

定義にしたがって文字列の比較を実装する。

ソースコード

vs func(string a){
	vs ret;
	string s;
	bool c=1;
	rep(i,a.size()){
		if(a[i]=='a'||a[i]=='i'||a[i]=='u'||a[i]=='e'||a[i]=='o'){
			s.pb(a[i]);
			c=0;
		}
		else{
			if(c==1)s.pb(a[i]);
			else{
				ret.pb(s);
				s="";
				s.pb(a[i]);
				c=1;
			}
		}
	}
	if(s!="")ret.pb(s);
	return ret;
}

bool cmp(string a,string b){
	vs A=func(a), B=func(b);
	vs C=A, D=B;
	sort(all(A)); sort(all(B));;
	
	if(A!=B)return A<B;
	return C<D;
}

class SyllableSorting {
	public:
	vector <string> sortWords(vector <string> words) 
	{
		sort(all(words),cmp);
		return words;
	}
};