ICPC 2013 国内予選 参加記

結果から言うと全然だめで,通過は全く期待できません.
OpeNyan というなまえでなっちゃんくまさんと出ていました.

  • コンテスト開始前
    • ライブラリ印刷したり,サイコロ持って来てもらったり,ソルティライチ買いにいってもらったりお菓子を持って来てもらったりする.
    • エディタは何を使うかという話になったが,学校で使っている BCPad を使うことになる.久しぶりすぎてなつい.
    • バグを検出するためにBまでは二人がそれぞれ独立に解いて入力を食わせてdiffを取り,正しかったら出そうという話をする.
    • 緊張で吐きそうになるが,なぜか通過出来ると思っていた.
  • コンテスト開始
    • とりあえず全ての問題文を3部ずつ印刷し,Aを読む.
    • 脳がバグって問題文が全然理解出来ず,コードを書いてもバグるため書くのをすぐやめてくまさんにタッチ.
    • その間にBを読む.普通に出来そうだなあという感じ
  • Aが通る(17分)
    • ナイスくまさん(結局二人が独立に解くという話は立ち消え)
    • すぐ変わってBを書く.
    • あんまりバグらずに書けたがpairの中にpairを入れたりして構造体書くべきだったかなあと反省するがそのまま実装を続ける.
    • 途中でキーボードが使いづらいと言ったらくまさんがりあるふぉーすというプロキーボード持って来てくれた.
    • 一回サンプルが合わないが,冷静に考えて値の渡し方を間違えていたことがわかる.直す.サンプル通る.
    • 2回とも出力を見て,同じ順位の人がちゃんと降順になっているか目でチェックする.なってる.出す.
  • Bが通る(45分)
    • 時間がやばいなあと徐々に焦り始める.
    • この辺りで順位表を見る.0perasanが1位で確か4完していてテンションが上がる.
    • このときはたしか27位ぐらいで,おっ良い感じじゃ〜〜〜んとか思う.
  • CとDのどっちをやるかという話になる.
    • くまさんがC出来そうみたいなことを言ったので,じゃあわたしがD読みますといって問題文を読む.
    • なんか簡単そうというか解けそう.
    • 演習室を出て外でチョコレートを食べソルティライチを飲みながら考える.
    • 螺旋は普通に作れそう.
    • 神が降りてくる.これは通過あるで,とか思う.
    • data[i][j] := そこからたどれる素数の個数の最大 と置いて,その最大が作れるような降り方を選択して再帰すれば解けるのでは???とか思う.
    • 怖いので演習室に戻ってなっちゃんに説明してみる.「あっいけそう」とか言われる.
  • Dを書き始める(90分)
    • 螺旋を作るところを紙に書いてあったので打つ.
    • たどれる素数の個数の最大を求めたところで,こわいのでいったん中身を出力してみる.あってる.テンションあがる.
    • なんか「さくは本番結構強いよね」みたいなことをコーチに言われ,適当に返す.(ごめんなさい)
    • 再帰で探索を書く.サンプル2個目から突然間違っている.なんで間違ってるのかわからん.
    • 再帰する方向の条件として,「自分からたどれる個数の最大-1」であること,と置いていたがこれもしかして同じでも行ってよいと置いた方がいいのでは?と思い直す.
    • 確か2個目はこれで直って,3個目以降からまたバグる.
    • コードを印刷してデバッグすることにする.
  • CとDを並行でデバッグする(120分)
    • なぜか配列を 400*400 で取っていて,冷静にかけてみると 160000 にしかならず,普通に足りないことに気付く.直す.
    • それ以外でバグってそうなところがない.わからん.
    • 20-30分ぐらい考えていたが,全然わからん.
    • 行けるところが複数存在したとき,より左の方を優先するようにしてみたが変わらない.
    • m=1000 の時の螺旋と個数の状態を印刷して,手で解いてみる.コードと同じように解いたら答えが合っている.意味不明になる.
  • あきらめムードが漂う(150分)
    • なぜかバグが取れないし,どうやらCもバグっていたらしい.
    • そういえばCほとんど考えてないなあとか思いながらデバッグする.合わない×5ぐらいする.
  • 終わり
    • 順位表見ると0perasanが単独全完していてかっこいいなあとか思う.
    • めっちゃつらい.泣きそう.
    • 自分の順位を見ることすらつらくて,コーチに「2完最上位だよ」とか言われる.嬉しくない.
  • その後
    • なっちゃんと帰る.楽しかったねえとか話すがつらいものはつらい.
    • 参加記を書くことを促されるがつらすぎて書けない.
    • あまりにつらすぎて体調が悪くなってくる.吐きそう.めっちゃつらい.
    • きゅうりにDの方針話したら合ってると言われる.悔しさが増してくる.
    • 勝って欲しかった人たちが1位と10位を取っていて嬉しいがその分通過出来なくて悲しい.
    • うーんまあしょうがないものはしょうがないと無理矢理割り切って寝る.
    • 順位表のペナルティ見ると,いっこしたのチームと2000ぐらい離れていて,ふぇぇってする.
    • 通過したかったなあ.アジア地区のみなさんがんばってください.

最近読んだ本

どうせなのでまとめておこうと思って.
ブクログを参考にしていて,だいたい直近一ヶ月ぐらい.
(最近読んだ直後に登録することを習慣付けたら,良い感じにメモれている)

  1. 猫色ケミストリー / 喜多喜久
    • 理系っぽい感じで読んでて楽しかった.舞台は東大?らしい
    • さくさく読めてよい
    • ☆5
  2. 真夜中のパン屋さん / 大沼 紀子
    • 今調べて知ったけど,今年の4月にドラマ化されていたらしい.
    • 夜中だけ開くパン屋さんの話で,色々な人がきっちり描かれているし微妙に関連しているので,お話がリンクした感がある
    • ☆4
  3. 植物図鑑 / 有川浩
    • 同棲したらこういう生活が出来るわけではないと思うけど,同棲したくなるぐらい良い雰囲気の話
    • 何かをしたくなる欲をかき立てられる感じ
    • ☆5
  4. BLACK BIRD 18 / 桜小路かのこ
    • 本じゃないけど.
    • 1~5 ぐらいまで読んでいて,完結したと聞いて友人に借りて最終巻だけ読んだ.
    • 少女漫画らしい感じですごくよかった.こういう話を求めていた.
    • ☆5
  5. 「映」アムリタ / 野崎まど
    • 友人が絶賛(?)していたので借りた野崎まどシリーズ1
    • 主人公とヒロイン??のやりとりは一昔前のラノベっぽくて懐かしかった.最近もそうなのかなあ
    • どんでん返しが多い.表紙かわいい
    • ☆4
  6. 舞面真面とお面の女 / 野崎まど
    • 野崎まどシリーズ2
    • 謎解きとそこからの展開がおもしろかった.
    • どんでん返しが以下略
    • ☆5
  7. 死なない生徒殺人事件 / 野崎まど
    • 野崎まどシリーズ3
    • ミステリーっぽい雰囲気.読みが覚えられなくてページ戻ったりした
    • どんでん以下略
    • ここらへんからノンストップで野崎まどを読み耽っていた.
    • ☆4
  8. 小説家の作り方 / 野崎まど
    • 野崎まどシリーズ4
    • 読後感は良い感じだった
    • どんで以下略
    • ☆5
  9. パーフェクトフレンド / 野崎まど
    • 野崎まどシリーズ5
    • 本格的にファンタジーが入ってきたか?と思いきやそういうことではなかった.
    • どんでん以下略.表紙かわいい.理桜ちゃんかわいい.
    • ☆5
  10. 2 / 野崎まど
    • 野崎まどシリーズ6
    • 野崎まどシリーズはこの本のためにあったんだなあ,という本.他の本の登場人物がぽんぽん出てくるので,記憶を引き出す感覚がおもろい.
    • 今までの本の「その後」が出て来て,あーこうなったのかーとか思いながら読めてたのしい.
    • どんでん以下略.面白かった.
    • ☆5
  11. 浜村渚の計算ノート 4さつめ 方程式は歌声に乗って / 青柳 碧人
    • これの前を読んだのがだいぶ前だったのでこういう形だったのか忘れたけど,短編集みたいな感じでさくさく読めてよかった.おもろい.
    • やっぱり読むと数学したくなる(でもやらない)
    • 完結が楽しみなシリーズである
    • ☆5
  12. 花宵道中 / 宮木あやこ
    • セクシャルセクシャルアンドセクシャル
    • 内容はセクシャルなのに言い回しのせいなのかそんなにセクシャルっぽい雰囲気がなかった.
    • この人の文章はやっぱり好きだなあ
    • ☆5
  13. 俺がお嬢様学校に「庶民サンプル」として拉致られた件 / 七月 隆文
    • いや,ラノベっぽいラノベが読みたくて…
    • お嬢様学校というのはやっぱりロマンがあっていいですね.
    • やっぱりラノベっぽかった.区切りが多くて,まあ読みやすいのかなあ.もう少し区切り少ない方が好み.面白くないわけではない
    • ☆4
  14. さよなら、手をつなごう / 中村 航
    • うーん,この人の文章好きだった記憶があるので買ったんだけど,こういう文章だっけ?美化されたのかなあ
    • 短編集だったがどれもあんまり.タイトルが良かったが表題作なし.でもどれもさよならをテーマにした話だった.
    • ☆3
  15. コミック百合姫 2013年 07月号 / 雑誌
    • 9月号が出る前に読みたくて買った.やはり百合はよい.
    • 絵がかわいいのが多いし,読み切りも多くていいですねえ.買い続けようと思った.あと表紙かわいい.
    • ☆5
  16. 太陽の庭 / 宮木あやこ
    • 雨の塔とリンクしている.
    • おとぎ話みたいなものと,サスペンス?のようなものが混じってたけど,個人的好みとしてああいう場所は永遠に続いていて欲しいなあ
    • 雰囲気がとてもよかった.
    • ☆5

結構読んでることにびっくり

SRM 571

01:10 ~ 02:25 のにってい〜

Easy : FoxAndGame

  • どこかで聞いた名前である
  • やるだけにしか見えない
  • さすがに簡単すぎると思ってコード書いてテストしたあとに問題文読み直す
  • 落ちそうなところ見当たらない
  • 出す.247.19 points.
  • もっかい問題文読む.やっぱり落ちそうなところない.びくびくしながら Medium 解くことにする.

Medium : FoxAndMp3Easy

  • きつねさんか〜〜
  • あれ,これやるだけでは???
  • さすがに簡単すぎると思ってコード書いてテストする
  • 一つ落ちたのであ〜むずいっすよね〜みたいなことを思いながら問題文読み直す
  • あれっ条件分追加したら直るやん
  • もっかい問題文読む.落ちなさそう
  • だす.480.90 points.
  • さすがにどっちも簡単すぎて罠がちりばめられてるんじゃないかとびくびくしながらもう一度問題文読むけどやばそうなところない.
  • やることがなくなったので Hard を開く

Hard : MagicMoleculeEasy

  • Reading Hard だった(わたしにとって
  • 魔法物理学って響きかっこいい

けっか

  • oox 728.09 points ; room : 1/20 ; whole : 139/1401
  • どっちも通りました.無駄に読んでないでさっさと出しとけばよかった(後悔)
  • easy easy hard みたいな難易度でしたね

SRM 567

21:10 ~ 22:25 のにっていです

250 - NinjaTurtles

  • 問題文に絵が含まれている+なんか長いのでちょっとうげぇってなる
  • 数学っぽいというか
    • floor(N/K) * 3 + floor(N / 3) = P
  • という式の K と P が与えられるから N の最小値を求めなさいって感じ
  • だったので,式をぐりぐりやれば解けると思って式ぐりぐりやりだす
  • なんか間違えてテストケース全部落ちる
  • 10分ぐらいして全探索すれば良いじゃんって思う.遅い.
  • 全探索解を提出する
  • 177.17 pts

500 - TheSquareRootDilemma

  • 問題文が短くて嬉しい
  • がんばったけど方針も違うし時間がないのでサンプルが通らないまま提出する
  • チャレンジされる
  • 理由を聞いたら TLE と言われた

けっか

  • ox- 177.17pts ; room 8 / 20 ; whole 357 / 1075
  • そろそろ 250 しか通せないのなんとかしてください
  • 928 -> 938 ( + 10)
  • こういう結果だった時に微妙に rating 上がるのすごく嫌ですね.

JOI 予選の入出力について

今日 12 月 16 日は情報オリンピックの予選ですね!!!
ということで、あんまり見かけなかった入出力について書こうと思います。

はじめに

情報オリンピックの予選ではプログラムを提出し、向こうのサーバーで実行して正誤判定をするのではなく、与えられた入力ファイルに対する出力ファイルを提出します。
で、これで問題なのがファイルで与えられてファイルで出力するってところ。
標準入力でもなければ標準出力でもないです。わーたいへん!
ちなみに:標準入力は cin / scanf 、標準出力は cout / printf です。(たぶん
予選当日になってファイルで入出力する方法調べるのめんどい!ファイルで入出力させるために色々書くのめんどい!というあなたにリダイレクトという技を教えようと思います。
(あと、コードを書いてファイル入出力する感じでやってしまうといちいちファイル名を書き直して実行しなおさないといけないのでめんどうというのもあります)(頭良い方法があるのかもしれないが知らない)

リダイレクトとは

リダイレクトとは:プログラムの入力元や出力先を通常とは違うものに変更すること。

リダイレクト【redirect】

つまりは、コードでは標準入力 / 出力しているけど、実行する時にファイルに入力 / 出力するように出来るよってことですね。
実際に書いた時の実行例を一度示します。あとあときちんと解説します。
(環境は OS X なので Windows とは実行ファイル等の名前が違うと思いますが、Windows でもリダイレクトは出来るとおもいます)

li_saku $ c++ joi_yo_1.cpp
li_saku $ ./a.out
# 適当にサンプルを実行する、大丈夫そうなので提出用の出力ファイルを作る
li_saku $ ./a.out < 2012-yo-t1-in1.txt > 2012-yo-t1-out1.txt
li_saku $ ./a.out < 2012-yo-t1-in2.txt > 2012-yo-t1-out2.txt
li_saku $ ./a.out < 2012-yo-t1-in3.txt > 2012-yo-t1-out3.txt
li_saku $ ./a.out < 2012-yo-t1-in4.txt > 2012-yo-t1-out4.txt
li_saku $ ./a.out < 2012-yo-t1-in5.txt > 2012-yo-t1-out5.txt

こんな感じでしょうか。サンプルの下り書く必要あったのかは疑問ですが一応。
で、この部分がリダイレクトです。

li_saku $ ./a.out < 2012-yo-t1-in1.txt > 2012-yo-t1-out1.txt
li_saku $ ./a.out < 2012-yo-t1-in2.txt > 2012-yo-t1-out2.txt
li_saku $ ./a.out < 2012-yo-t1-in3.txt > 2012-yo-t1-out3.txt
li_saku $ ./a.out < 2012-yo-t1-in4.txt > 2012-yo-t1-out4.txt
li_saku $ ./a.out < 2012-yo-t1-in5.txt > 2012-yo-t1-out5.txt

ファイル名を見て分かる通り、2012-yo-t1-in1.txt が入力ファイル、 2012-yo-t1-out1.txt というのが出力ファイルです。
この時のコードの中身はファイル入出力なんかしていなくて、普通に使うように標準入出力してます。
「<」の右側にあるファイルを標準入力として実行ファイルに与えて、「>」の右側にあるファイルに標準出力をする、といった感じです。
(ちなみに、出力ファイルに存在しないファイル名を指定した場合そのファイルを作ってくれます。また、存在するファイル名を指定した場合は中身が上書きされます)
リダイレクトを使うと、ファイル入出力のことなんか考えずに問題を解くことができますね!でも!!!
ファイルが 5 つもある!!!おおい!!! 5 回も実行したらどこかで数字間違えるよ!!!という人居ませんか?(わたしはそうです)
ということでシェルスクリプト書きました。

シェルスクリプト

ファイル名を固定していますが、例年この形なので今年もきっとこれだと思います。そうでなかったら、合うように調整してください。

OS X, Cygwinなどなど

書いたものはこれです。→ https://gist.github.com/4298378
cygwin で使用するときは、a.out を a.exe に書き換えてください。 a.exe でなく、問題毎に実行ファイルの名前を変えている場合はそのファイル名にしてください。)
左の方に Download とかいうボタンがあるとおもうのでそこからダウンロードして、名前を「[任意の英数字からなる文字列].sh」にしてください。拡張子は固定です。そうじゃないと動かないと思います。
使い方は以下の通りです。(このファイルが redirect.sh と保存されているとします。)

li_saku $ sh redirect.sh 1

これだけです。
sh というのはこれを実行するのに必要なもので、 redirect.sh はファイル名です。そのあとの 1 というのは問題の番号を表しています( 1 〜 6 のどれか)。
もし cygwin でエラーが出た場合、ファイルの中の ./a.exe という部分を a.exe に変えると上手くいくかもしれません。(手元に実行環境がないので未確認)

windows のコマンドプロンプト(cmd.exe)

スクリプトファイルはこれです。→ https://gist.github.com/4298328
実行ファイルを a.exe という名前で指定していますが、問題毎に実行ファイルの名前を変えている方は適宜変更して対応してください。
左の方に Download とかいうボタンがあるとおもうのでそこからダウンロードして、名前を「[任意の英数字からなる文字列].bat」にしてください。拡張子は固定です。そうじゃないと動かないと思います。
使い方は以下の通りです。(このファイルが redirect.bat と保存されているとします。)

li_saku $ redirect.bat 1

これだけです。
redirect.bat はファイル名です。そのあとの 1 というのは問題の番号を表しています( 1 〜 6 のどれか)。

使う時の注意など

これを一度実行するだけで、入力ファイル 5 つ全てに対する出力ファイルが生成されます。
なので、同じフォルダ内に入力ファイルがすべて入っている必要があります。
また、redirect.sh / redirect.bat の後に与える数字は一つじゃないとダメです。エラー処理なんかしてないので、各自気を付けてください。

おわりに

情報オリンピックの予選、がんばってください、応援してます!!!