問題
http://community.topcoder.com/stat?c=problem_statement&pm=8374&rd=10793
解き方
文字列操作の問題。
問題文の最後の比較条件を見落としてしまった。。
コード
class SyllableSorting {
public:
bool ispossible(char cur){
char ch[]={'a','e','i','o','u'};
FORE(i,0,5)if(cur==ch[i])return false;
return true;
}
vector<string> calc(string w){
int n=w.size();
vector<string> ans;
int at=0;
while(at<n){
string str="";
int flag=0;
while(at<n){
if(ispossible(w[at])){
if(flag==0)str+=w[at++];
else break;
}else{
str+=w[at++];
flag=1;
}
}
ans.push_back(str);
}
return ans;
}
vector<string> sortWords(vector<string> words) {
int n=words.size();
vector<pair<pair<vector<string>,vector<string> >,string> > p;
FORE(i,0,n){
vector<string> cur=calc(words[i]);
vector<string> cur2=cur;
sort(all(cur));
p.push_back(make_pair(make_pair(cur,cur2),words[i]));
}
sort(all(p));
vector<string> ans;
FORE(i,0,n)ans.push_back(p[i].second);
return ans;
}
};
public:
bool ispossible(char cur){
char ch[]={'a','e','i','o','u'};
FORE(i,0,5)if(cur==ch[i])return false;
return true;
}
vector<string> calc(string w){
int n=w.size();
vector<string> ans;
int at=0;
while(at<n){
string str="";
int flag=0;
while(at<n){
if(ispossible(w[at])){
if(flag==0)str+=w[at++];
else break;
}else{
str+=w[at++];
flag=1;
}
}
ans.push_back(str);
}
return ans;
}
vector<string> sortWords(vector<string> words) {
int n=words.size();
vector<pair<pair<vector<string>,vector<string> >,string> > p;
FORE(i,0,n){
vector<string> cur=calc(words[i]);
vector<string> cur2=cur;
sort(all(cur));
p.push_back(make_pair(make_pair(cur,cur2),words[i]));
}
sort(all(p));
vector<string> ans;
FORE(i,0,n)ans.push_back(p[i].second);
return ans;
}
};