Hatena::Grouptopcoder

SRM diary(Sigmar)

SigmarのTopcoder SRM参加記録など雑記です。
社会人になってから競技プログラミングを始めました。どこまで行けるか分かりませんが合間を見つけてアルゴリズムの勉強をしています。

2011-05-08Google Code Jam 2011 Qual Round

Google Code Jam 2011 Qual Round B Magicka

| 13:13 | Google Code Jam 2011 Qual Round B Magicka - SRM diary(Sigmar) を含むブックマーク はてなブックマーク - Google Code Jam 2011 Qual Round B Magicka - SRM diary(Sigmar) Google Code Jam 2011 Qual Round B Magicka - SRM diary(Sigmar) のブックマークコメント

Problem Statement

解答方針

シミュレーションするだけ

どうもこういうの書くのが遅くて良くない

ソースコード

入出力処理は省略

combはcombine、oposはopposed(oppoにすれば良かった?)、invoはinvokeをそれぞれ示す

string solve(int C, int D, int N, vector <string> comb, vector <string> opos, string invo) {
	string res;
	
	int appear[256];
	memset(appear, 0, sizeof(appear));
	char prev=127;

	for(int i=0; i<N; i++) {
		res.push_back(invo[i]);
		appear[invo[i]]++;
		for(int j=0; j<C; j++) {
			if(prev==comb[j][0] && invo[i]==comb[j][1] || prev==comb[j][1] && invo[i]==comb[j][0]) {
				res.erase(res.size()-2, 2);
				res.push_back(comb[j][2]);
				appear[prev]--;
				appear[invo[i]]--;
				appear[comb[j][2]]++;
				prev=comb[j][2];
				break;
			}
		}
		for(int j=0; j<D; j++) {
			if(appear[opos[j][0]] && appear[opos[j][1]]) {
				res.clear();
				memset(appear, 0, sizeof(appear));
				prev=127;
				break;
			}
		}
		if(res.empty()) prev=127;
		else prev=res[res.size()-1];
	}

	return res;
}
トラックバック - http://topcoder.g.hatena.ne.jp/jackpersel/20110508