コーディング合宿1日目

サークルのほうでコーディング合宿があったので参加しています.
コーディング合宿というのはノートPCを持参してどこかの施設にこもってひたすらコードを書く,という,とてもとてもストイックな合宿です.
何を書くかについては特にテーマは決められておらず,各自が自分の決めた目標に沿ってコードを書きます.初日で各自目標予告をした後はご飯とお風呂の時間以外はひたすらコードを書き続けます.最終日にはみんなで結果報告をします.

9:50

適当に準備して集合場所の部室へ.適当にだらだらする.

13:00

施設に到着.毎年来ている特に驚くことではないのですが,周囲には自然以外に何もありません.コンビニすらないのでこれが欲しい,となると結構困ります.

13:30

目標発表をしてCoding Phase開始.
僕はICPCの国内予選で最難関と称される2題を取り組むつもりでした.
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=1151&lang=jp
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=1146&lang=jp
デバッグで相当はまることが想定されていたので,ビジュアライザーも作らないといけないかな,と思っていました.このときは.


とりあえず「くるくる」の方から考える.凸ではない多角形領域の中で棒がひたすらくるくる回るので,それをひたすら再現する.
アルゴリズムを考えるのになかなか難儀した.1時間くらい.ただのシミュレーションなのでそこまで捻ったことはしない,ものの,実装するとなるとやはり重い,重い… 幾何ライブラリをとりあえずコピペ.これだけで2KB〜3KBになってる.
とにかく書く.コード量は多いがやっていることはそれほど複雑じゃない.細かいところで間違えるかもしれないが….
とりあえず書き終わって一通りデバッグをしたらサンプルが通ったのでsubmitしてみた.ここまで3時間くらい.どうせWAだろうなーと思ってstatusを見るとAC.あれ,あっさりAC.もっと詰まるかと思ってたのだけど…

16:30

続いて「影の秘密」の方に移る.アルゴリズムを考える.前に解説サイトで「2円の共通接線」を使うとか書いてあったのを見た気がするのだけど,その考えは使わず,完全に解析的に考えた.影の幅の関数f(θ)は複雑な振る舞いをするが,ある区間で区切ってみてやれば3角関数(周期はどれも2π,位相,振幅は異なっているかもしれない)になってくれているので,そこで最大,最小値を求める.2分探索とかはせず,acosとかを使う.精度が若干不安だがまぁきっと良いだろう.
アルゴリズムを考えたのが1時間くらい.で,コードを書いていっていたが,ここで飯タイムになった.

18:00

晩飯.結構おなかがすいていたので食べた.
友人が最後の一人になるまでゆっくり食べていたので一緒にだらだら喋っていた.幼稚園の頃給食が食べられず最後まで残って食べていたこととかを思い出した.(どうでもいい)

19:00

晩飯から帰ってきて再び書き始める.
計算量が最悪の場合O(N^4)くらいになりかねないし普通に考えるとTLEになるのだけど,まぁいいかなぁと思ってそのまま進める.適当に工夫すればO(N^3)にできるし.
大体できたのだがサンプルが全然合わない.なぜだ.とりあえず振舞いは正しそうなのだけど… と,ここで出力する値を勘違いしていたことに気づく.(最小|最大の幅ではなく,そのような幅にする角度を求めるらしい)
で,修正するがまだ合わない.というか90度ずれてる.なんでだ.あ,θってよく見たら自分の考えてたのと違う… 修正.サンプル大体合ってる.

20:10

submitする.WA.えー.とりあえずTLEは回避できているっぽいのでこれは安心.
θ=0.0となるべきところでθ=πが出力されてるのだけど,別にこれはいいよねぇ.問題にもそう書いてるし.


…あれ,でもこれ,AOJだとPrecision Validatorしかなかったような… ためしにθ=πのときを0で出力するようにしてsubmitしてみる.
ACがいただけた.

20:30

とりあえずやることがなくなったのでなくなったので風呂に入る.1時間くらいずっとだらだら喋る.

21:30

コードを書く気力が無くなっていたので,なぜか持ってきてしまった専用コントローラーでひたすらBMSをしていた.

24:00

飽きてきたので終了.日記を書いて寝ることにして今に至る.
明日は2008年のUTPCのセットでもやろうと思います.気力があれば今年の「古い記憶」も倒したいけど….




参考:http://d.hatena.ne.jp/se-kichi/20100912