学習の栞

学びたいことと、学ぶべきことと、学べることの区別がついてない人間の進捗管理

CODE FESTIVAL 2015 予選A 予想問題

昨夜、会場までの移動時間が4時間かかるかからないがTLで話題になってたので、予選AのDぐらいにこういう問題来るんでないかなーと。

問題

tkhs君はCODE FESTIVALへの参加を考えている。CODE FESTIVALでは自宅から東京駅へ行くまでの所要時間がT分以上であると前泊の費用を主催者であるR社が負担してくれる。tkhs君は万全の状態でコンテストに臨むために前泊したいのだが、自宅から東京駅まで行くのにT分以上かかりそうもない。そこでtkhs君は歩く速さを調整することで自宅から東京駅に行くまでにかかる時間が最短でT分になるように調整するようにした。
tkhs君は電車または徒歩で移動する。歩く速さは体力の範囲内で自由に決められるが、CODE FESTIVALの参加規約上、東京駅までの経路は時間が最短になるような経路を選ばなくてはならない。電車はtkhs君が乗ると直ちに出発し、遅延は無いものとする。また、電車の乗降にかかる時間は無視してよい。

入力

N T E W V
ta_1 tb_1 tt_1
...
ta_E tb_E tt_E
wa_1 wb_1 wd_1
...
wa_W wb_W wd_W

一行目に自宅、東京駅、及び経由地点の合計の数 N、前泊が可能となる移動時間 T分、 電車の区間数 E、 徒歩で行動できる区関数 W、tkhs君の歩く最速の速さ V[m/min.] が与えられる。
各地点には0からN-1の番号が振られている。
自宅は番号0, 東京駅は番号 N-1の地点である。
続くT行に、電車で移動できる区間を表す情報が与えられる。ta_i, tb_i間 は電車で移動でき、その所要時間はtt_i分である。
続くW行に、徒歩で移動できる区間を表す情報が与えられる。wa_i, wb_i間 は徒歩で移動でき、その移動距離はwd_iメートルである。

出力

自宅から東京駅までの移動に最短でちょうどT分かかるような歩く速さ v [m/min.]を一行に出力せよ。
そのような v が存在しない場合、またはそのようなvが複数存在する場合は -1 を出力せよ。
期待される出力との差が10^{-6}以下であれば正解とみなされる。

入力例

9 30 6 5 600
1 2 3
2 4 10
3 5 15
3 6 8
6 8 20
7 8 2
0 1 200
1 3 10000
3 4 3000
4 7 500
5 8 500

こんなんです
f:id:konjo_p:20150923054125p:plain

出力例

作る気力なかった

解法

にぶたん+dijkstraで解けるんでないかなーと思ってる。もっといい方法があると厳しめな制約つけれそう。

2015年 JAG夏合宿参加記

JAG 合宿参加記

JAG合宿に参加してきたので参加記を。タイポとか不正確な情報はそのうち修正します。気が向いたら何か追記するかもね。

合宿参加前

去年の夏合宿終わった後、「来年は黄色になってここに来てやる」「来年は国内通ってから来てやる」とか言ってた。 今年も国内予選落ちたし、黄色になったものの三日で青に落ちたりしたので何一つ達成できてない感じがあって辛かった。

合宿申し込んで参加確定する前の段階で投機的に飛行機のチケットを取った。おかげで今年は夜行バスで来るとかいう羽目にはならなかった。

1日目

懇親会で懇親できない勢だった。

2日目

地震で目が覚めた。寝坊しなくてラッキー。 臨時チーム編成所で筑波大logicmachineのzerokugiさんが作問で抜けた穴にマッチングされた。A,Bは通してもらった。Cを担当した。逆からやるだけだった。
アルゴリズム貰ってDも実装したけど、バグらせてバグらせて申し訳なかった。不甲斐ないじゃ済まない感じのアレ。 エッジ張ってる部分でバグってたのを指摘してもらったけど1ケースWAが出てた。巡回セールス問題解くbitDPみたいにDFSしたら通らないらしい。free solving sessionでBFSに書き直したら通った。つらい。

3日目

臨時チーム編成所で豊橋技科大 GO TO THE FUTURE の穴にマッチングされた。コンテスト開始と同時にJavaの環境を入れるところからスタート。
Bから読んだらやるだけだったので実装した。 H簡単らしいと聞いて読んだら誤読して二分マッチングっぽいと言ってしまう(実際マッチングだけどフローじゃ間に合わなさそう)。読み直したら微妙に問題の難易度上がったけど二部探やるだけで通るっぽいことにすぐ気づけたから実装した。バグにはまりまくって辛い思いをした。 15分毎ぐらいに「書けそうな問題ありますかー」と声は書けたものの、PC占領してて申し訳ない感じだった。 別の問題の概要説明うけてて「こどふぇのあれだー」ってなったものの、Hで時間消費しすぎてそれどころじゃなかった。

4日目

臨時チーム編成所で名工大splas_boomerangの穴にマッチングされた。
「エディタvimじゃないですよね?」「vimです」「まじかー」というやり取りの後、cygwinvimを入れてもらうところからスタート。vim入れたら同時にgccやらなんやらもアップデートされたらしく、Eclipseが動かなくなったとのことで、急遽自分の環境でコンテスト参加することに。「emacsあれば大丈夫」とのことだったけど、自分のPCがMacでCtrlとAltの位置が違っていて大丈夫そうじゃなかった。
Aを通してもらってる間に先の問題を残りのメンバーで読み進める。D見るだけ見て「やばい」と直感する。先の方まで読んでみたけど、読んだ中ではBが一番とけそうな問題だった。実際ポインタ貼って回すだけだった。B実装開始時点で上位陣のB提出がなくて不安だったけども、上位陣がBをACしだして安心した。Bを無事ACしたら、Fの実装が始まった。他の問題読んでる間にメンバーがFのFA取ってた。プロ。この間にGの方針が固まってた。問題読んでたらGも通ってた。Dやばいと思っていたけど上位陣が通してたのでこれを考え出す。FのFA取った人はJを貪欲にやるだけっぽいと言ってJをやり始める(のちに誤読が判明)。自分たちが考えてたDは上位陣にとっては簡単だったけど、基礎知識足りてないと無理な問題だったらしい。結局4完。10位で合宿中の最高順位だった。

全体通して

去年もそうだったけど、強い人と会うといい刺激になっていい。コンテスト出る度に頭の悪さ自覚させられるけど、オンサイトだとさらに頭の悪さ自覚させられるのでとてもいい。3つのコンテストすべてで足を引っ張った感じになって辛かった。チームを組んでくださった皆様ごめんなさい。そしてありがとうございました。来年は国内予選通過してないと合宿参加資格がないので意地でも通過する。夏合宿div2の話が帰りがけにあったけど、境目がTCのレートで1800ぐらいになるのかなー。
JAGの皆様、参加者の皆様、ありがとうございました。

おまけ

地震

オリンピックセンター地震にあうというレアな経験をした。地震あると放送入るのねー。

競プロ勢とおしゃべり

積極的にお喋りできなかった。受け答えは大抵「アッ、ハイ…」。twitterでフォローしてる方とかいるんだけど、去年の合宿やこどふぇで知り合った人とか、それなりに絡んでる人とか、知ってる人としか話せなかった。twitterとかで積極的に絡んで行かないとああいう場に行って辛さを感じると思った。

SRM

このSRMは合宿中だし出れないなーと思ってたら、同部屋の人が出るというのでsoftbankが売ってる人権に課金して出場した。貪欲で落ちるケース見つけられずに貪欲したらゼロ完だった。合宿中にレート下がった。つらい。

ARC

ARC出てたらBバグらせた。大抵のテストケースでACしてたけど、間に合うコードでTLE出てて思考停止。バグが取れる前に回線が無くなった。バグの原因はオーバーフロー。そんなに大きな数こないだろと思ってintにしてた変数に1e5近く入ってた。C++のシフトを論理シフトだと勘違いしてて負の数が来て無限ループになってTLEとかいう可能性を見落としてた。

新宿駅被害者の会

合宿終わって神保町にでも遊びに行くかなーと思ったら新宿駅の中で迷った。危うく帰りの飛行機を逃すところだった。この時ほど「飛行機よ、遅延していてくれ」と思うことは後にも先にもないのではないだろうか。 新宿から神保町に行くには都営地下鉄新宿線に乗ればいいという知識は持ち合わせてたので、新宿線を求めてさまよった。新宿駅西口を。都営地下鉄の駅に行けば案内が受けられると思って大江戸線の案内に従って駅へ。「ここからじゃ新宿線の駅まで10分ぐらいかかるから、このまま大江戸線で春日まで行って三田線に乗り換えて行きなさい」とのこと。 神保町から新宿に戻ってきて東口のコインロッカーに預けた荷物を取りに行くため、再び新宿駅をさまよった。南口の改札から見える案内には「こちらが東口」って出てるのに、いざ改札出ると東口への案内が一切無いのが罠。案内を求めてさまよった。 山手線で浜松町に行きたかったのだけど、**方面という案内に浜松町方面とか羽田空港方面とかいう案内がない。改札くぐったら路線図もそう簡単には見当たらなかった。路線図を求めてさまよった。 結局空港には出発の25分前に着いた。20分前までに搭乗手続きを済ませる必要があったので間に合ったと思ったら自動チェックイン機でチェックインできない。有人カウンターまでお越しくださいの表示。有人カウンターに人が並んでいたが、どうにか21分前までには搭乗手続きを開始できた。保安検査場を通過したら搭乗口へダッシュ。どうにか飛行機に間に合った。神保町出発が飛行機の出発時刻の2時間前で大分余裕を持たせたはずなのにどうしてこうなった。研究室やプロコンサークルへのお土産を買い損ねた。お土産は前もって購入しましょう。

合宿来る時も新宿駅でちょっと迷ってた。JRの駅に貼ってある路線図みて参宮橋駅に行くにはどの路線に乗ればいいのかと必死になって参宮橋を探していた。小田急線はJRの路線じゃないとか余所者は知らないよ。。。

これ以上被害者を増やさぬために

飛行機

始めてスカイマークの飛行機に乗った。某社事案のときはANAなりJALなり使えるのだけど、ANAは学生の自己負担で乗るにはきつい金額。ANAと比べると操縦が荒い感じはあった。羽田を飛び去るとき、機首を斜め上に向けて上昇されるという今までにしたことのない経験をした。きつい角度で上昇する時間も長かった気がする。薄雲越しに見た東京の夜景が綺麗だった。

合宿後

プロコン練習したい欲高まってるけど、目の前に積まれた論文に圧倒されてる。英語読みはじめたら1時間で睡魔に襲われるの本当にアレ。睡魔に負けてすいません。参加記書いてるのも現実逃避のゲフンゲフン

TopCoderで黄色くなれました

TopCoderのalgorithm部門で黄色くなれたので歓喜の報告記事。

 

TopCoderに登録してから2年と3ヶ月。青色になってから1年。ようやくyellow coderになることができました。TCOR2Aがratedになって本当に良かったです。

 

以前の記事に書いた今年の目標のうち、ARC3完・TopCoderAlgorithm部門でyellowになるという目標を達成できました。あとは今年度のICPCで2チーム目通過を決めたら立てた目標全達成ですね。がんばります。

C++のupper_bound,lower_boundについて

何度書いても覚えないし,バグって悲しい思いをしたのでまとめることにした.

基本事項

  • ソート済みのコンテナに対して呼ぶ.
  • ランダムアクセスできないコンテナに対しても呼ぶことができる.
  • lower_boundは指定した値以上の先頭の要素を指すイテレータを返す.
  • upper_boundは指定した値より大きい先頭の要素を指すイテレータを返す.

ソースコード

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	vector<int> v = {0,0,0,1,1,1,4,4,4};
	cout << lower_bound(v.begin(), v.end(), 2) - v.begin() << endl;
	cout << upper_bound(v.begin(), v.end(), 2) - v.begin() << endl;

	cout << lower_bound(v.begin(), v.end(), 1) - v.begin() << endl;
	cout << upper_bound(v.begin(), v.end(), 1) - v.begin() << endl;

	cout << lower_bound(v.begin(), v.end(), 5) - v.begin() << endl;
	cout << upper_bound(v.begin(), v.end(), 5) - v.begin() << endl;

	cout << lower_bound(v.begin(), v.end(), -1) - v.begin() << endl;
	cout << upper_bound(v.begin(), v.end(), -1) - v.begin() << endl;
}

実行結果

6
6
3
6
9
9
0
0

比較関数を渡す

operator<として用いる比較関数を渡すことができる.

ソースコード

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool comp(int a, int b) {
	return a > b;
}

int main() {
	vector<int> v = {4,4,4,1,1,1,0,0,0};
	cout << lower_bound(v.begin(), v.end(), 2, comp) - v.begin() << endl;
	cout << upper_bound(v.begin(), v.end(), 2, comp) - v.begin() << endl;

	cout << lower_bound(v.begin(), v.end(), 1, comp) - v.begin() << endl;
	cout << upper_bound(v.begin(), v.end(), 1, comp) - v.begin() << endl;

	cout << lower_bound(v.begin(), v.end(), 5, comp) - v.begin() << endl;
	cout << upper_bound(v.begin(), v.end(), 5, comp) - v.begin() << endl;

	cout << lower_bound(v.begin(), v.end(), -1, comp) - v.begin() << endl;
	cout << upper_bound(v.begin(), v.end(), -1, comp) - v.begin() << endl;
}

実行結果

3
3
3
6
0
0
9
9

比較関数の第一引数,第二引数には,upper_bound/lower_boundで指定した範囲,値のどちらも入る可能性がある.(うまく表現できない)
これを知らずに,第一引数に指定した範囲から取った値入れて,第二引数に探す値入れて比較するだろとか適当なこと考えながら書いたらバグって悲しい思いをした.

ソースコード

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;

int N;
bool comp(int a, int b) {
	if(a == N) cout << "first" << endl;
	else if(b == N) cout << "second" << endl;
	else cout << "else" << endl;

	return a < b;
}

int main() {
	vector<int> v;
	for(int i = 0; i < 1000000; i++)
		v.push_back(i);
	sort(v.begin(), v.end());
	N = 1346;
	lower_bound(v.begin(), v.end(), N, comp); cout << endl;
	upper_bound(v.begin(), v.end(), N, comp);
}

実行結果

second
second
second
second
second
second
second
second
second
second
second
second
second
second
second
second
second
second
second
first

first
first
first
first
first
first
first
first
first
first
first
first
first
first
first
first
first
first
first
first

備忘録的記事:vimでファイルの種類ごとに設定を分ける方法について。

vimでファイルの種類ごとに設定を分けるのには定石があるらしい。設定を進めていくなかで困ったことに出会ったので備忘録的に。

 

ファイルの種類ごとに設定ファイルを作り、~/.vim/ftplugin/ に置くのが定石らしい。設定ファイルの名前は hoge.vim (hogeはファイルの種類の名前であり、通常は拡張子) とする。例えば、C言語ソースコード用の設定ファイルはc.vimとする。 ~/.vimrc に
filetype plugin on
の一行を書いて設定終わり。

 

TeXのソースファイルを開くときに困った話.

vim hoge.tex
などとして起動するとtex.vimに記述した設定が反映されない。これは、.tex複数の種類のファイルの拡張子であることが理由らしい。この類いのファイルを開くときはvimのファイルの自動判別がうまく働かないことがあるらしい。ここ(http://vimdoc.sourceforge.net/htmldoc/filetype.html#ft-tex-plugin)を参照しながら、~/.vimrc に

let g:tex_flavor="latex"

と書くとうまくいく。

AOJ Volume1 全埋め終わりました

本日16:22頃、AOJ0132:Jigsaw Puzzle をACしてAOJ Volume1が終わったので記念に記事を書きます。

 

今までに埋めた問題が267問で、このうち200問がVolume0, Volume1に含まれる問題です。Volume0全埋め達成が2013年の10月15日。Volume1埋めるのに1年ちょっとかかってしまいました。今年のうちにVolume1が埋まってしまって良かったです。

 

Volume1はPCKの問題なので例によって実装が辛い問題が結構あります。アルゴリズム的には蟻本のbitDPの章までの知識で解ける問題しか入っていないので、そのぐらいのレベルの人が埋めるにはちょうどいいVolumeだと思いました。Volume1で特に辛い問題はAOJ0132:JigsawPuzzleとAOJ0182:Beakerの2問なので、この2問は解けないと思ったら後回しにするのが吉だと思います。

 

次はVolume2埋めなのですが、これはVolume5埋めと並行しようかなと思ってます。競技プログラミングが嫌いにならない程度にのんびり埋めていきます。ICPCメインで対策しないといけないはずなんですけどね、本当は。

CODE FESTIVAL 2014 参加記

乱文・長文注意。

CODE FESTIVAL2014に参加してきました。オンサイトコンテストに参加するのはJAG合宿以来で三度目です。

 

CODE FESTIVAL予選前
CODE FESTIVALが開催されるらしいという情報が出たのは夏休み突入前で、交通費全額支給+本選人数200名というコンテストが開催されるらしいという話が出た時点でtwitterはお祭り騒ぎでした。twitterで「ある程度のレベルがあるプログラミングサークルは部員旅行に連れて行ってもらうぐらいな気分でいい」という話があったので、自分の所属するプログラミングサークルの夏休みの活動目標にCODE FESTIVAL予選通過が設定された。

 

CODE FESTIVAL予選
予選A104位通過。D問題の満点解法が貪欲だろうという検討はついたが、解法を詰めるのに時間がかかりそうだったのでさっさと部分点を取りに行った。Dの満点解法を実装しようとして初期化ミスでprintf消すと動かない事案を踏んで1時間つぶしたのは悔しかった。結局330点だった。
予選Bは全完で56位。私は実装苦手な人間なのでDの部分点までに時間をかけすぎてDの満点を取るまで散々な順位だった。とりあえず予選Bでも予選通過順位に入れたので良かった。

ちなみに、所属しているプログラミングサークルの部員で、予選に参加した人は8割くらい通過していた。リクルートさん部員旅行ありがとうございます。

 

CODE FESTIVAL前日
3限の講義が終わって東京へ出発。前泊の宿泊費も持ってくれるとはリクルート社恐るべし。本選参加前アンケートで保安検査場の通過やら手荷物の受け取りやらを考慮したら最短で3時間以上かかるな。という感じだったが、実際には会場近辺のホテル到着まで4時間以上かかった。前泊申請しといてよかった。
R&Bホテル上野広小路に宿泊だった。明らかにCODE FESTIVAL参加者だなという人たちが居る。しかしコミュ障をこじらせてどうこう。

JAG夏合宿のときもそうだったが、競プロ勢というのは一目でそれとわかる独特の雰囲気を持っているらしい。

 

CODE FESTIVAL一日目

本選前

受付に立っていたのがJAG合宿でチームを組ませてもらったyuustiさんで「あっ」という感じになる。交通費精算の書類に判子を押したあと、CODE FESTIVAL Tシャツをもらう。初めてのプロコン系Tシャツで嬉しい。6完してパーカー獲得するぞと意気込む。twitterのぞいたら向かいの席にYazatenさんが居ることが分かりお話してた。

 

開会式

なんか格好良い映像が流れる。twitterではどんだけ金かけたんだという雰囲気に。しかも後援がアカデミック。CODE FESTIVALやべぇという雰囲気になる。indeed社の方がお話を英語でする。英語できないのでtwitterに集合してた。適当に拍手を送る。
開会式終了後、OpenContestとLA賞がらみのルールの穴が突かれる。ルールの穴が仕様になった。


本選
5完で150位でした。D問題ではまった。辛い。B-D問題で1回ずつWAを叩いていて作問者が用意した落とし穴すべてに落ちたり、自分で掘った落とし穴に落ちたりしてた。

A,Bはやるだけ。B問題で制約|S| <= 3000を見て、intに入るな。intで大丈夫と思ったのはダメだった。Sは数字の列でした。Sをstringで受け取り無事AC。これで10分無駄に。
C問題、fが単調増加だったら嬉しいなと思って単調増加であることを示そうとするがうまくいかなかった。小さい数で実験すると単調増加のように見えたので、単調増加と仮定してプログラムを組む。ループまわして確認してみるとfが単調増加だったので提出したらACした。

D問題、はまった。後回し。パスカルの三角形を描いて問題文をよく読むと入力受け取って足し算して吐き出すだけ。この問題のACが142:23。辛い。

E問題。明らかにDP。ぬるっと実装してAC。

私を含む多くの人が解けたのはこの五問。5完が110人ぐらい居た。

5完した時点で残された時間は30分ちょっと。J問題はO(1)解が存在しそうな雰囲気だったので、思いつけば実装は簡単だと判断してJ問題に挑む。結果爆死。

 

休憩

大学の先輩や同期と、あの問題はああやって解いたとか、パーカー取れなくて悔しいとかそういう話をしていた。近くにkoyumeishiさんを見つけたけど、コミュ障をこじらせてどうこう。

 

解説

A-D問題はやるだけ的な扱いを受けていた。E問題からちょっと難しくなりますねーみたいなことをちょくだいさんが言ってたけど、個人的にはE問題はB問題の次ぐらいに簡単だったのでなんかなー。小さい例で実験するのは大切だと思い知らされた。F問題の解法を聞いて、JよりFに取り組むべきだった感じもする。

 

TALK SESSION 01
ちょくだいさんを見に行く。アルゴリズム擬人化の話だった。それなりにぶっ飛んでた。「Brute ForceでTLEしたら実装したお前の責任」らしい。ビームサーチといわれても何のことだか分からなかったけど、説明を受けて再発明したアレだと気付く。ビームサーチなんて名前で呼ばれてたのね。

 

Food Challenge
ごはんを食べたかったので、FoodChallengeした。診断人さんのニコ生を後日タイムシフトで見て、FoodChallengeしてる場合じゃなかったと思った。FoodChallenge中は同じ大学の先輩や同級生、そしてYazatenさんと本選の感想だったり、AOJの進捗どうですかとかそういう話をしていた。そこにちょくだいさんが現れてお話できて嬉しかった。本選Bで入力間違えてintで受け取ったとかいう話をしたら、sampleに3000を超す入力あったじゃんと怒られた。sampleは注意深く読みましょう。絶対に。

 

LIGHTNING TALK 01
肉LTと幾何問題の美しい解き方について。肉LTは「肉はアルファベットより数字に拘れ」という話だった。幾何問題の美しい解き方はコンピュータジオメトリに載ってるらしい。

 

TYPING

LT終わってぶらーっとしてたらTYPINGやってみませんかーと言われてやってみた。ミスタイプでGAME OVERしました。(翌日リベンジ。5分弱でクリアしました。)

エキシビジョン
本選上位者が実況付きでコーディングをするという企画。amylase伯爵の実況・解説もあってとても面白い企画だった。そして、コーディングを眺めながら問題の解説を受けるだけで盛り上がれる観戦者もなかなかだった。準急さんがやべぃ。slが走っていたり、コンテスト中にブログを更新したり、たこ焼きclerを投げたりと、エキシビジョン出場者の遊びも見ていて面白かった。

CODE FESTIVAL二日目

あさプロ

「朝からプロコン」の略らしい。コンテストページには「asa!」の文字列。CODE FESTIVAL 前にはtwitterで「あさプロ(朝までプロコン)」の文字列が流れていたりしたけど、朝までプロコンやってた人居たのかな。朝までプロコンは来年に期待ですね。会場入り口で配られた、チーム対抗早解きリレーのチーム割から、隣の席がichyoさんらしいことが分かる。やはりコミュ障をこじらせてどうこう。
あさプロはeasy, middle, hardの3つのコンテストが存在して、二問づつ問題がかぶっているという説明を受けた。本選150位だったので、middle最底辺として参加。結果は2完の16位でした(大躍進)。参加者のレベルが制限されているとはいえ、AtCoderの順位表一ページ目に名前を載せたのは初めてなので嬉しかった。

あさプロmiddle
A問題は両側からdijkstraやるだけ。類問がQUPCで出てました。QUPCでこの問題の類問を作問してたkyosさんは爆速で提出していたはずである。

B問題は貪欲にやるだけ。ちょっとだけデータ構造の知識が必要。

C問題は本番中に解けなかったのですが、あとから考えてみたら遷移確率行列の積を繰り返し二乗法をつかってとるだけだった。twitterでは誤差どうこう言われてたけど、コンテスト終わって実装した感じだと大して誤差に気を使う必要は無かった。遷移確率行列の考え方は大学の講義で習っていたのに解けなかったのは情けない。情報理論の**先生ごめんなさい。

D問題はDPだったらしい。帰り道、空港まで行く電車の中でDarseinさんに教えてもらった。この日の個別指導塾で「ぽよぽよがN*L*Lで通ったんだけど、、、」という質問が来ていたらしく、Food Challengeしていたらamylase伯爵が個別指導塾のほうに呼び出されていた。

本選でA問題のLA賞狙いに行った同級生のn*kollsonとかいうやつが真面目にやっていれば本選151位でeasy全完(1位)+middle2完(16位+)で両入賞だったのになーとぼんやり考える。

 

TALK SESSION 02
ちょくだいさんと坂本一憲さん(国立情報学研究所助教)のトークセッション。プロコンがらみの雑談で盛り上がったあと、AI Challenge用のAIをペアプロ。次に出す手を選ぶとき、相手が何を出すかの予測を入れるために、次の手を決定する部分を複数回ループさせるというテクニックを学んだ。chokudAI Contestが走っていたり、サーバー落として「これがレッドコーダーの撃墜力だ(ドヤァ」と言ったりと笑いもあって面白かった。

 

書道コーディング

面白そうな企画だと思ったので参加。
#defien WA AC

#define TLE AC

#define MLE AC

#define RE AC

と願望を書いた。#define CE ACが抜けていると指摘されたりした。

 

LECTURE 02
あの秋葉さんのトークということで参加不可避だった。開始時間ぎりぎりに入室した人は立ち見だったので、早めに会場に行っておいて良かったと思った。あきばやばかった。競プロの練習方針について聞けたり、サイン貰えたりしてよかった。匿名質問できる制度大切ですね。

 

チーム対抗早解きリレー
チーム11(チー無名)で参加。C問題を担当。明らかにO(1)解の存在が見える。チームの人に確認とったところ、自分の見てたO(1)解が嘘だったらしく、別のO(1)解を教えてもらった。早解きリレーなので、提出を押してそのままコーディング。コンパイルもせずに出したのでちゃんとコンパイル通ってくれるか不安だったけど、無事ACしてくれた。多分、コーディングしてた時間より、スリープからの復帰を待ってた時間とsubmissionsのページをリロードしてた時間のほうが長かった。

そのあとは特にやることもなく、「あれどんな問題なんです?」とか聞きながら他の人たちがコーディング進めていく様子を眺めていた。Color Gameが偶奇判定で解けるという証明を考えてるけど、まだ証明が完成してなくて辛い。k = 0で偶奇判定で解けるのは自明なので、kに関しての帰納法で証明できそうな気がしてる(気がするだけ)。早解きリレー。リレーが終わった後のほうが話題がたくさんあって、チームの人と仲良くなれそうな気がするのだけど、リレー終了後にそんなに時間なくてお話できなかった。つらい。

 

閉会式

チーム対抗リレーが終わり、そのまま閉会式へ。二日間の様子を収めた映像が流れる。楽しかったなーと思いながら眺めてた。indeed社からTシャツのプレゼントがあるという話があって、記念撮影したら解散だった。会場出口でtunenarazuさんとchako0407さんが待っていた。握手して帰宅するシステムらしい。確か、会場側から眺めて右側にtunenarazuさん、左側にchako0407さんが居た気がする。左側のほうから会場を出たので、chako0407さんとだけ握手して帰ることになるのかなーと思ってたら、tunenarazuさんが、「あ、逃げた」と言ったので「そういうシステムになってたのか」と思ってtunenarazuさんと握手して帰宅。tunenarazuさんごめんなさい。

 

帰り道

kyosさんとclimpetさんと会場出口で出会えたので、ここにDarseinさんともう一方が加わって空港へ。同じ大学の同期は別班で空港に行ったらしい。climpetさんが空港までのコストが最小になる経路を知っていたのでclimpetさんについていく。climpetさんとkyosさんはDarseinさんと知り合いなので、Darseinさんと接点無いのが私だけという状況。「JAG合宿のときは『あれがDさんかー』と遠目に見てました」という話をしたら「どうぞ気軽に、welcome!」みたいなことを言われた。

空港までの電車の中で、来年以降もCODE FESTIVALがあるのなら、大学の競プロサークルに入部してきた一年生が目指す一番最初の大会としていいですよねーという話になっていた。そこそこのレベルの競プロerが相当数存在することが確認できたので、来年本選に出れるかどうかかなり危ういと思っているので、プログラミング暦半年の人が目指すにはかなり高い目標な気もしたが、ICPC国内予選で1完するという目標よりはだいぶましらしい。とても充実したプロコンだったので来年は予選参加者が激増してさらにレベル上がりそうな気がしているのだが。。。

他にも、DさんからあさプロMidDの解法を教えてもらったり、kyos氏がじゃんけんの比較関数みたいな比較関数を使ってsortしたら停止性は保証されるのかとかそういう疑問を投げたりしてた。

空港に着くと、同じ大学の人々がほとんど同じ飛行機で帰るらしいということが分かった。久留米高専の某氏も(話しかけなかったけど)発見した。帰りの飛行機がポケモンジェットだった。飛行機の到着後、手荷物が最後の最後まで出てこないというちょっとしたトラブルに遭遇したが、ちゃんと手荷物見つかった。

空港から大学方面の自宅まで、climpetさんやj_gui0121さんと来年のICPCどうなりますかねーとかいう話をしながら帰宅してた。

 

おわりに

CODE FESTIVAL予選と本選、あさプロを通じて、競プロ欲が刺激されました。自分とおなじぐらいのレベルに100人以上居て、ここから頭一つ抜け出さなければと強く感じました。また、予選B・あさプロを通してAC数で差をつけられるように問題が調整されている場合に限って言えば、抜け出せるだけの実力になっているが分かり、自信につながりました。ARCとかSRMだと問題の難易度差が大きくてなかなか実力向上を実感できないんですよね。

CODE FESTIVALが終わり、なにやら寂しい気分に。いつまでもCODE FESTIVALの余韻に浸っていたい気もしますが、そろそろ次の大会(ICPCの2015年国内予選かな)に向けて練習をしなければ。

次の目標は
TopCoder SRMでyellowになること。

・2015年のICPCアジア大会に進出すること。(2チーム突破の壁を越えること)

・ARCで3完の壁を突破すること。

の三つでしょうか。院試に落ちない程度に、留年しない程度にがんばります。

CODE FESTIVAL 2014 こちらがお金を払わないといけないのではないかと思うほどにとても充実した大会でした。来年度もぜひ開催してほしいです。

リクルート社の皆様、運営サポーターの皆様、その他CODE FESTIVALの運営に携わられた皆様、ありがとうございました。