TopCoder SRM 486 DIV 2

197.12点。

Rating: 598 -> 724
灰色なりにやっと初期の水準を回復してきた。次回でコケなければ緑に戻れるか?

250 Text Message

基本的に一発で書いて一発でテスト通して一発で提出したつもりだったのだが、案外と書くのに時間がかかってしまったせいで、200点を下回ってしまった。

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
using namespace std;

class TxMsg {
public:
	string getMessage(string original) {
		vector<string> v;
		string vowels("aeiou");
		string tmp("");
		string dst("");
		for(int i = 0; i < original.size(); i++){
			if(original[i] != ' '){
				tmp += original[i];
			}else{
				v.push_back(tmp);
				tmp = "";
			}
		}
		if(tmp.size()){
			v.push_back(tmp);
		}
		for(int i = 0; i < v.size(); i++){
			/* if has no cons */
			for(int j = 0; j < v[i].size(); j++){
				if(vowels.find(v[i][j]) == string::npos){
					goto hascons;
				}
			}
			dst += v[i] + ' ';
			continue;
hascons:		string t("");
			for(int j = 0; j < v[i].size(); j++){
				if(vowels.find(v[i][j]) != string::npos){
					continue;
				}else{
					if(j == 0){
						t += v[i][j];
						continue;
					}
					if(vowels.find(v[i][j - 1]) != string::npos){
						t += v[i][j];
					}
				}
			}
			dst += t + ' ';
		}
		return dst.substr(0, dst.size() - 1);
	}

	

};

500 One Register

解き方とか全く分からない。精進しないとなあ…

1000 Crazy Line

とりあえずnext_permutationで解いてChallengeされた。当たり前だ。50!は恐い。
そもそもnext_permutationの使い方を理解しておらず、sortしていなかったし、解ける筈もなかったが、解法が全く思いつかないあたりとかは本当に反省すべきだと思う。