Hatena::Grouptopcoder

れんしゅうちょう。 このページをアンテナに追加 RSSフィード

 | 

2013-07-15

[]ICPC2013 国内予選 参加記 00:56

こんなのを書いていた訳ですが, ただのコード置き場的になっていて, 参加記としての体をなしていないので, もう少しまともに参加記を書こうという感じです.

コードはそっちにあるので, その辺は省略.

参加記と言っても, 自分の記憶にあるイベントを時系列順に並べただけで, あまりまともな文章にはなっていないと思われるので, (読む場合は)適当に読み流すのがよいと思います.


金曜日はそもそも授業が無かった上に, 何時に出ればよいかの感覚が全くもって狂っていたので, 一時間以上前に学校に着いた.

コーチの先生を探しだし, 研究室で雑談をしていた.

サイコロ持ってきて無いという事に気づき, 先生に話した所, 正二十面体と, 十面体のサイコロを貸してくれた. (六面体は無かった)

チームメイトの二人は授業があり, 少し遅れて来る事になっていた.


雑談しているうちに, 5分前とかになっていて, 急にネットに接続できなくなって焦る.

自前のテザリングでもやってみるが, そっちでも繋がらない.

普通に開始時間を過ぎて, 「やべー」とか思っている間に, 元の回線がつながるようになったので, 数十秒遅れで問題を見る.

とりあえず印刷しながら, 画面半分でincludeとmain関数を書き, もう半分で問題を読む.


「答えは150*150を超えない」に気づかず, 「Aにしてはむずいなー」と思いながら書き始めた.

途中で気づき, 更に「対角線の自乗で計算すればintだよ!」という仏のような言葉も見えたので, そうする.


サンプル入れる→合わない.

条件の大小とかでクソみたいな間違えを数カ所していたので, 逐次修正.

A問題 AC (583秒: 9分)


B問題を読む.

「この問題, AOJでやった事ある!!」って感じだったが, まぁてきとーに書くとデバッグ大変そうという感じ.

とりあえずまともにstruct作って書こうと思い, 適当に書く.

サンプル入れる→合わない

チーム番号によるソートをするらしいと解って, それ追加.

入力1を入れると, 落ちる.

問題数のサイズで初期化するべきところを, チーム数で初期化している事に気づき, 修正.

この修正している辺りで, チームメイトの二人が来る.

Bの修正はすぐ終わりそうなので, とりあえずCから読んでもらう.


B問題 AC (1711秒: 28分)


順位表をちらっと見ると, 既にトップは3完とかしていて, うわーと思うが, まぁそれなりの順位.

まだ30分経っていない事に安心する.


とりあえず, 問題のページを最後までスクロールして, チームメイトに読んでもらう or サンプルを詳しく見てもらうような問題を決める.

Eが幾何でFが一瞬では読めない問題, そして1問減ってる事が解る.

とりあえずDとEを読んでもらって, Cを解く事にする.


C問題をぱっと見ると, 「k段階目の有権者はどうなってん?」とか疑問が湧いて, 先に見た二人に聞きながら問題をちゃんと見る.

問題が把握出来て, 解き方も解る.

一瞬stack使ってやり始めそうになったが, 普通に再帰で書きなおす.

参照する場所の間違えとか, 数字列→数の変換でゴミみたいなミスしていて, 手間取るが, 書き上げる.


Cの入力1が通っていえーいと思いながら入力2を投げたらまさかのWA.

ソースどう見ても間違ってないし, 提出ミスの可能性を疑って提出しなおしたら, 普通にAC.

アホみたいなミスして, 時間を失い, ペナルティをもらう.


C AC (3126(+1200)秒: 51(+20)分)


D問題とE問題を聞き, E問題で, 「3つ決めた時の位置と高さ」を立式しておいてもらい, D問題を解く事にする.


D問題で, 迷路をどう持つか一瞬迷うが, 「ある番号の下, 左, 右」を返す関数を作る方針で行く.

この関数は, 適当に出力すればどこがバグってるか解るので, デバッグはしやすかった.

しかし, 途中で, これらの関数はデバッグしたものと思い込み, サンプルに対する出力が間違っている原因を別の所に求めてしまって, アホみたいに時間を使った.


また, setでなくqueueになっていて, 「n段降りると3^nくらいの候補になる」とかいう事になっていて, しかし自分ではsetにしたと思い込んでいて, 「この遅さはなんなんだー」等と言っていた.

まぁデバッグでかなり時間を使ったものの, 無事AC.


D AC (7145秒: 119分)


順位表を見ると, そこそこの順位ではあるものの, Eが簡単そうであったので, Eを解かないと通らないかもしれないとか思い始める.

E問題の立式をしておいてくれたので, 導出を聞きながら実装する.

サンプルを入力するも, 数個だけ答えが合わない.


立式や実装を何度も観察し, 解法について色々話すも, どうにも正しそうに見える.

残り十五分とかになって, 自分の中ではだんだん諦めが入ってくるが, 順位表を見るに, このまま行けば通過出来そうな感じがしてくる.


やはり間違えが見つからず, そのまま時間切れになる.

順位表を見るに, 上位校の重複を数えなくても, 通過っぽいと解る程度の順位で, 去年と違って一安心した.


家に帰って解き直してみると, 立式の途中で, 図に騙される感じのミスがあった事が解った.

これは気づけない…/(^o^)\


今年は, 去年より明らかに練習を積んでいたが, 解いた問題全てでバグらせた.

しかし, バグの解消は多少早くなっている.

「バグらせるのはしょうがないから, デバッグがしやすいようにしよう」という感じでやるのが, (精神的にも)それなりによい戦略の一つであるなぁと思った.

地区予選では, バグを出さずに, 一発ACをしたい.

 |