東京工業大学プログラミングコンテスト2019 参加記
8月31日の東京工業大学プログラミングコンテスト2019オンサイトに参加しました。
オンサイト参加者はATNDで募集され60人程がフューチャー株式会社オフィスの一角に集まりました。 参加者にはAtCoderのプロフィールが記された名札が配られます。
もふふ〜 pic.twitter.com/Qau2EoOLHL
— てぃーいけ (@1119_2916) August 31, 2019
コンテスト
15問5時間のコンテスト。 5完でした。
A Next TTPC
ABCのA問題からB問題くらいの問題。
B okyoech
正規表現で.*okyo.*ech.*
か判定する問題。
めったに使わないので空(そら)では書けませんでした。
C XOR Filling
整数列のXORが与えられた整数になるように構築する問題。 先頭から貪欲に決めることができます。
D 素数取りゲーム
三山崩しを素数に限定したゲーム。 具体的には次のように行動が制限されています。(各山にある石の初期個数も素数。)
一度に取ることができる石の数は素数個で、かつその山の残る石の数も 0 個または素数個である必要がある
素数を普通の三山崩しに置き換えてから、三山崩しの判定方法を検索して解きました。
E N法陣
WA
Nが偶数の場合にすべてNo
であると気づかず悩んでしまいました。
想定難易度は500だそうなので、さっと解けなければならなかったと思います。
迷走した結果、魔方陣生成関数が生まれたので競プロスニペットに加えておきます。
ここで詰まった後、残りの問題に目を通し、易しそうに見えたO問題に移りました。 15問もあれば幾何問題もあるだろうと予想していましたが、ありませんでした。
O oneesan puzzle
S
からG
までの自己回避歩行の個数がNとなるグリッドマップを構築する問題。
自己回避歩行という語を知りました。
まず「フカシギの数え方」を観るとたった5×5のマップ(動画の数え方では4×4の格子)でも今回のNの上限2019を超える数になることがわかります。
出力するグリッドマップの高さ・幅の上限はともに32であり、複数の部屋を組み合わせる余裕があります。
しばらくグリッドを眺めていたら、自己回避歩行の数がそれぞれa
, b
の部屋を並列につなぐとa + b
に、直列につなぐとa * b
になることに気づきました。
あとは構築問題でおなじみの2の累乗数を並べるなどして実装することができます。 私はNを適当な2整数の和に分けてから、それぞれ適当な小さい数の積で表すという実装をしてACしましたが、余白の取り方が雑だったため、後になってN = 1559の1ケースのみで落ちると気づきました。 (その夜のうちに直しました。)
直した えらい #ttpc2019 pic.twitter.com/m3Ebb50iiq
— remin (@reminjp) August 31, 2019
出力の見た目が多様で楽しい問題です。
O問題芸術部門です #TTPC2019 pic.twitter.com/qp3Zlr2eOe
— さはら (@shr_pc) August 31, 2019
Oです pic.twitter.com/QGE1ksdW2C
— Mister (@mistterpp) August 31, 2019
— keymoon (@kymn_) August 31, 2019
O二冪マン #ttpc2019 pic.twitter.com/0eYchSDnkU
— ꑄ꒖ꐇꌅꏂ🐾 (@snuke_) August 31, 2019
Oの2冪解法 #ttpc2019 pic.twitter.com/wSW1a4jba0
— RTnF (@RTnF_cp) August 31, 2019
oneesan の自分の tester 解です(何bit ですか?)#ttpc2019 pic.twitter.com/GZl77H5jw6
— りあん (@rian_tkb) August 31, 2019
Oこんな感じ #ttpc2019 pic.twitter.com/Y9pppWBJGO
— idsigma (@IKyopro) August 31, 2019
懇親会
フューチャー株式会社のご厚意によって、寿司とピザが無料で振舞われました。 皆がおなか一杯食べられる量が並べられていました。
同じ大学の人が少なく寂しかった半面、Twitterでしか見たことの無かった方々とお会いすることができました。
有志コンテストながら問題の質が高く、運営の滞りがなく、食事も豪華で素晴らしいイベントでした。 運営の方々に感謝です。