hogecoder

tsutaj 競技プログラミングの記録

競技プログラミングで黄色になるまでにやったこと

先月末に、めでたく AtCoder 黄色になりました。

きのう、ふと「黄色になりました記事書いてないなぁ」と思って雑に呟いたら、書いてくれという圧力声援を感じたので、記していこうかなと思います。記事の特性上自分語りしかありませんが、それでも良い方はお読みいただければと思います。

続きを読む

ACPC 2018 参加記

会津大学プログラミング合宿 2018 に参加しました。ACPC は実は初参加です。

0 日目

JAG に行っていたので東京にいた。TIke さんと seica さんと ferin さんと olphe さんでボドゲカフェに行ってあそんだ。ワイナリーはワイン農家をやめた者が勝つゲームだった (いやプレイングが悪かったのもあると思うけど)

その後夕食を食べに行ったが seica ちゃんが限界をしていておもしろかった。夕食後解散になったが実は宿を取っておらず (は?) 東京駅近くで適当に発見したネカフェに泊まった。これがまた結構あたりを引いて、ネカフェなのに完全に個室だしコインランドリーはあるしシャワーも追加料金なしで使えてとてもよかった。次に東京行くときはまたお世話になります。

1 日目

東京からバスで会津に移動。会津に着いてバスから降りた瞬間 olphe さんと waku 君に遭遇したので一緒に会津大学まで歩く。けっこうあるくね

この日のチームはランダムに決めていただきました。pachicobue さん、tubuann さん、moritaoy さんと 4 人でチームを組みました。自分は C の篩書くやつと E の虚無 DP と B の戦犯を担当しました。(制約をよく読まずに、積分するみたいなミスリードをしてしまい多大な迷惑をおかけしました・・・)

解説聞いたら E は貪欲でも解けるらしいんですが貪欲が世界一苦手なのでしょうがないね。あと不可能が 2 〜 3 問あっておもしろかった

この日の懇親会は中止でしたが、宿が近い人たち 10 人くらいで集まって中華料理屋行って魔女ラーメンを食べてきた (魔女なので (いいえ))

2 日目

5 時間の会津セット、この日は事前にチームを組んでいて、drken さんと TIke さんと一緒に出ました。

自分は D を担当したんですが FA が取れなくてかなしいね。あと G は結構悩んだのですが場合分けすれば簡単に解けてしまい、場合分け力のなさをかんじた。あとは TIke さんとペアプロしたりしなかったり、一緒に考察したりしなかったりしてました。後ろの問題はほぼ drken さんが通していました (流石すぎる・・・)

†懇親会† ではお酒が無限に出るのでもちろんビールをたくさん飲んだんですが、体の許容量が有限だったので破滅しました。記念撮影から記憶が全くなくて気づいたら宿の和室で寝てました。ご迷惑をおかけしました・・・

3 日目

なんか普通におきられたので大学に行った。この日はコンテストの運営でした。やはりコンテスト開始 2 時間前に会場入りする作戦はかなり有効で、今回もちょうどよく準備を終わらせることができました。

特に大きなミスもなくコンテストが無事終わったので、とてもよかった! (ただ、G が既出なのはすいませんでした・・・)

終わった後は TIke さんと シンヤカトー さんと Noimin さんとカラオケに行きました。みんな仕上がってた。次の機会までにまた練習しとくか〜

この日は引き続き会津に泊まることにしていて、まだ行ったことがなかった富士の湯に行った。あれは最高だったね、至急札幌にもつくってほしい

その後帰ろうとしたんですが道中にボウリング場を発見したので 2 時間投げてきてしまった、温泉の後にボウリングをすると汗をかくのでオススメしません (それはそう)

4 日目

適当に観光をした。

あとこの日の宿は郡山で取っていたので郡山まで移動した。爆睡しすぎて駅員に起こされた (もうしわけない)

宿に着いた後に CODE FESTIVAL 予選 A がありましたが、解ける数え上げがたくさん出たので通過した。いえい

5 日目

空港まで移動して、飛行機で新千歳へ。まだ新千歳空港のフードコードが復活していなくてかなしい・・・

そんなこんなで帰宅

作問について

気づいたら自分が作った問題がセットの半分以上を占めていました。RUPC で簡単めにしたらやたら解かれたのでちょっと難しくしましたがそれでもやたら解かれました。合宿のレベルがあがっているのを感じますね。

B 問題

北大の B 問題は難しい説、そろそろ定着しそう (ア

あるデータ構造で管理するとクエリ O(1) で処理できて嬉しいです。他にも想定解はあったのですが、クエリ平方分割は完全に想定外でした。

正直なんでこの問題が生えたのかよくわかってません。生えるときは生えるんですよね、作問って・・・

E 問題

5 秒くらいで適当に思いついた問題です。分かる人にとっては解法まで一本道でいけると思いますが、コーナーケースにひっかからないように気をつける必要があります。実際、コーナーで引っかかった人は多かったようです。

F 問題

最初思いついた問題文が解法を隠しきれていなくてアレだったので、頑張って問題設定を考えた結果こうなりました。それなりに隠せたのではないかと自負していますが、隠しすぎて想定解通りに通してくれた人がほとんどいませんでした (ア

G 問題

ありがちな問題設定なので事前にかぶっていないかどうかこちらでも調べていたのですが、どうやら既出だったようです。すみません・・・。 コンテスト中に beet さんからこの問題の解説記事の印刷クエリが飛んできてすべてを察した

元々は unique でない数え上げをさせるつもりでした。ちなみに unique でない場合についても、真面目にやれば  O(|S|^2) で、若干手を抜いてデータ構造に頼っても  O(|S|^{2} \log^{2} |S|) くらいになります。興味があれば考えてみてください。

総括

合宿は楽しみながら圧倒的成長できる最高コンテンツですね (再確認)

来年もいくぞー!!!

JAG 夏合宿 2018 参加記

初めて JAG 夏合宿に参加しました。同じ大学からは four-t のチームメイト (rsk0315 君と TAB 君) と waku 君も参加しました。以下、雑に記します。

0 日目

札幌から東京まで移動した。なんか自分が離陸した後に新千歳行きの電車が止まったらしく、わりとあぶなかった・・・

無事成田空港に着陸し、その場で本日の分の宿を取る (は?) なんとか新宿の宿が取れてよかった。計画性を身につけたい。

1 日目

オリンピックセンターに集合する前に four-t の愉快な仲間たちと昼食に行った。確かカツ丼を食べたような・・・

ご飯を済ませてオリンピックセンターに向かう途中、いつもの人々 (TL で限界をしがちな人々) がいたので一緒に会場まで行くことに。TAB 君が道案内のプロだった。

ガイダンスがあった後に自己紹介があった。名乗るだけで笑いがおきるこたつがめしゃん

チーム決めの時間があったがすでにチームが決まっているのでおしゃべりをする。そうこうしているうちにコンテストが始まる。1 日目は海外リージョンの国内予選の問題だったようです。

チーム戦の時は TAB が A を、rsk0315 が B を、自分が C をまず読むのが固定化されているので、今回もそれにしたがって読んでいった。C 問題はいもす法を知っていれば解けるやつだったのですぐ解けた。A も B もすぐ通ったので、3 完した時点で一瞬 1 位になっておもしろかった。

D は何すればいいかはわかるけど実装が大変・・・という感じだったが rsk0315 が 「list で常勝w」 とか言っていたので書いてもらった。通った。はいプロ

この辺で E を TAB と一緒に解くが永遠に通らなくて悲しくなった。その間に、不可能に見えていた F を rsk0315 が頑張って考察して通していた。凄いなあ。

結果は 5 完でした。自分 1 人だったら 3 完で終わってそう、チームメイト様々でした。

コンテスト後に解説があって、その後は部屋に移動。今年は 3〜4 人で一部屋を使うようで、 algon さんと imulan さんと一緒の部屋になりました。

この日の夜に AGC があって、談話室で参加。C が解けたためレートが上がって嬉しかった。

2 日目

Writer が豪華なセットでした。

A は若干詰まっていたらしいので見る。 109 + 7 ずつ増やして全探索すれば良さそうということがわかったのでそれを伝えて書いてもらう。通った。うれしいね。

B も詰まっていたらしいので見る。1, 5, 10, 50, 100 円玉を使うパターンはとても少ないので全探索すれば良いことがわかったので書く。通った。うれしいね。

C は見たけど数学が壊滅的な自分には解けないのでチームメイトに解いてもらう。その間に他の問題を見てみたが、なかなか虚無で・・・ (この後 3 時間くらい無が訪れる、考察はしていたけど)

H は prefix の包含関係による重複数え上げをどうにかしたい気持ちになったので、Suffix Array と Rolling Hash を使ってどうにかする解法を思いついたので書く。通る。やったね。

E も解法はだいたい思いついたが高速化部分がどうも思いつかない (bitset 使ったけど TLE を食らった)。終了 15 分前くらいに FFT で行けることに気づいたけど時既に遅し、あまりにも時間が足りなすぎて終了。悲しいなあ・・・。

この日は 4 完でした。E は FFT もっと早く思いついていたら確実に解けていたので、本当にもったいない。こういうミス無くしたいですね。

3 日目

この日は JAG のセットでした。典型詰め合わせみたいなセットで割と好き。

A がなんかつらそうだったので見る。解法の確認をして落ち着いて通した。B は全く見てないけど rsk0315 が通してた。C はよくある DP をやれば終わりなので書いて通した。

この後に何をやるかは少し迷ったが、順当に順位表で解かれているやつを中心に考察をした。まず J は TAB と一緒に考えたところ偶奇で分けて考えると素直に解けることがわかったので自分が書く。少しバグったが通った。次に I は自分が J を書いている間に TAB ・ rsk0315 が大体考察を終えてくれていて、実装時に自分も少し手伝って通した。

この時点で G はあまり解かれていなかったが、なんか解けそうだったので考察していた。前から見ると今考慮している数字が何の位なのか扱いづらかったので、後ろから見ていく DP をすることにした。実装方針はかなり気をつけなければならないが、 TAB が条件を簡単にしてくれて助かった。ちゃんと紙で考察したのもあって一発で通ってうれしいね。

終盤になって、他がよく通している F が残っていたので通したいねーという気持ちになった。実験してみると条件はだいたい見えるが例外があるのかよくわからなくて怖い。とりあえずわかっている条件を全部書いたら通った (えぇ・・・) これは反省なんですが F を通すのが遅すぎで、もっと早くに実験すべきだと思った。これは自分の戦略ミスです。

総括

3 日間とても短かった。あと一週間長くても良いくらいだった (ホンマか?)

今回思ったのは長時間コンテストになるとライブラリの豊富さとか、そのへんの知識が結構要求されますね。もっと知識をみにつけていきたい。

ちゃんと復習もしつつ、明後日の会津合宿の準備もしつつ、精進していきたい!!!