Codeforces Beta Round #54 (Div. 2)

A. Chat room

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s, t("hello");
	cin>>s;
	int cnt = 0;
	for(int i = 0; i < s.size(); i++){
		if(cnt >= t.size()) break;
		if(s[i] == t[cnt]){
			cnt++;
		}
	}
	cout<<(cnt >= t.size() ? "YES" : "NO")<<endl;
	
	return 0;
}

B. Coins

#include <cstdio>
#include <vector>
using namespace std;
int main()
{
	int n;
	scanf("%d\n", &n);
	vector<int> v;
	while(1){
		v.push_back(n);
		if(n <= 1) break;
		for(int i = n - 1; 0 < i; i--){
			if(!(n % i)){
				n = i;
				break;
			}
		}
	}
	for(int i = 0; i < v.size(); i++){
		printf("%d%c", v[i], i == v.size() - 1 ? '\n' : ' ');
	}
	return 0;
}

C. Trees

なんかこの種の問題すごく見覚えはあるんだけど、解き方が分からないんだよなあ…
こういうのは本当に復習をちゃんと毎回しないから起こるのだと思うので、あとで解法しらべて書きます。

上位陣のコードちょろっとのぞいたらマクロ多様みたいな感じで読む気が失せたのだけど、どっかに解説とかないのかね