SRM457 div2 medium

問題を理解はできるが、どう効率よく、分かりやすく組んだらいいか迷ってしまった問題。
12:59 GMT-6問題.

とりあえず列挙して、当てはまったものだけをピックアップしてそれから最小の時間を導出するのが、一番分かり易そう。

bool valid(char* s, string time) {
	for(int i = 0; i < 11; i++) {
		if(time[i] != '?') {
			if(time[i] != s[i]) {
			return false;
			}
		}
	}
	return true;
}

class TheTriangleBothDivs {
	public:
	string fix(string time) {
		string m = time.substr(3, 2);
		for(int i = 0; i < 2; i++) {
			if(m[i] == '?') {
				m[i] = '0';
			}
		}
		int minute;  //minuteは?->0に変換して終わり。
		set res;
		sscanf(m.c_str(), "%d", &minute);
                //時間をしらみつぶしに見ていく。当てはまったものだけをresに格納。
		for(int i = 0; i < 24; i++) {
			for(int j = -9; j <= 9; j++) {
				char s[15];
				sprintf(s, "%02d:%02d GMT%d", i, minute, +j);
				if(valid(s, time)) {
					res.insert((i+24-j)%24);
				}
			}
		}
		int hour = *res.begin();
		char ans[17];
		sprintf(ans, "%02d:%02d", hour, minute);
		return string(ans);
			
	}