一昨日行われた ACM-ICPC 2014 国内予選に, KCCT-A2014 というチーム (自分 @nahcnuj, @akahana_1, @summation_hsp2) で参加しました.
自分は B 問題を解きました. 問題文を読んでやるだけっぽいと思ったので, すぐに実装をはじめましたが, 石の落下処理の実装に手間取りました. 入出力例が合うことを確認して, Data No.1 の出力を提出したところ Wrong Answer. 落ちるケースが分からないままコンテスト終了.
他のチームメンバが A 問題と C 問題を解いていましたが正答できず... 結果, 一問も正答することができませんでした.
来年の ICPC に向けて競技プログラミングの勉強をしていこうと思います.
自分が書いた B 問題のソースコードを貼っておきます.
#include <iostream> using namespace std; int field[10][5] = {{0}}; // empty is 0 int H; // スコア計算および消去処理 返却値はその処理で得られたスコア int calc() { int score = 0; for (int i = 0; i < H; ++i) { int count = 1, before = field[i][0], start = 0; for (int j = 1; j < 5; ++j) { if (field[i][j] == 0) continue; if (before == field[i][j]) ++count; else if (count >= 3) { break; } else { count = 1; before = field[i][j]; start = j; } } if (count >= 3) { for (int j = start; j < start+count; ++j) { field[i][j] = 0; } score += before*count; } } for (int j = 0; j < 5; ++j) { int spcount = 0; for (int i = H-1; i >= 0; --i) { if (field[i][j] == 0) spcount++; else { if (spcount > 0) { field[i+spcount][j] = field[i][j]; field[i][j] = 0; } } } } return score; } int main() { while (cin >> H, H) { for (int i = 0; i < H; ++i) { for (int j = 0; j < 5; ++j) { cin >> field[i][j]; } } int score = 0, before = 0; do { before = score; score += calc(); } while (score-before > 0); cout << score << endl; } return 0; }