おここ

競プロなど

ICPC Taichung Regional 2025 参加記 (ococo 視点)

台湾に行きたいワン

ICPC Taichung Regional とはなんぞや?

ICPC(International Collegiate Programming Contest)という世界中の大学が参加できるでっけー競技プログラミングのコンテストがあり、最終的な決勝戦であるところの World Final に対して、いろんなところで予選がある、そういう大会がある。3人1チームでやるチーム戦なのだが、自分が属しているチームである y_1 は7月に一個目の予選である国内予選に参加して12月に行われる Yokohama Regional への進出権を得た。(↓国内予選については参加記があるので、こちらからも雰囲気が分かるかも)

ococonomy1.hateblo.jp

Regional というのは日本では Yokohama で行われているが他にも色々な国で行われており、アジア太平洋地域の Regional では、優勝すると World Final(以下、WF) に、優勝せずとも良い感じの結果を出すと Asia Pacific Championship に進出することができ、Asia Pacific Championship(以下、Championship) からも上位の何チームかが WF に進むことができる。そして、その Regoinal のうちの一つが台湾で行われる Taichung Regional である。

なぜ我々は Taichung Regional に出たのか?

ここまで説明した Regional について、最大2つの Regional に参加することができ、日本の国内予選で参加権を得た Yokohama Regional の他に我々 y_1 は Taichung Regional に参加した。我々の実力として、どこかしらの Regional で優勝することは現実的ではないが、Championship に進出できる可能性があるのではないかという感じで、出る Regional の数を増やして Championship に進出できる可能性を少しでも上げたいという話を前からしていた。アジア太平洋地域で行われる Regional について、それぞれの地域の治安・移動コストなどを考えると、韓国で行われる Seoul Regional か台湾で行われる Taichung Regional のどちらかに出たいという感じだった。

ここで、Asia Pacific Championship に参加できるチームを選ぶためのルールがいくつかあるのだが、複数の大会の結果を一つにまとめる以上どうしても Championship に進みやすい Regional と進みにくい Regional がある。Championship 進出難易度については、候補に挙がった Regional と Yokohama を比較すると Taichung < Seoul ≒ Yokohama (左ほど簡単)という印象で、できれば Taichung に進みたいという話に。去年も Championship 進出ボーダーが Yokohama 等と比較して高くなかった印象があり、今年は海外チームの申し込みが殺到するんじゃないか?と思っていたが意外とそうでもなく、最初の申し込み期限までには海外チーム用の10枠のうちいくつかが埋まらず、申し込み期限が延期となっていた。

また、北海道大学ICPC チームとして、レーティングや Championship 進出欲が近い Akai_koibito というチームもいるのだが、そのチームのメンバーとも海外 Regional について色々話していて、恐らく向こうのチーム内でも我々と同じような話が行われ、結果的に北大からは2チームが Taichung Regional に行くことに。ちなみに北大から海外 Regional に行くというのは相当久々らしい?(少なくともここ5年はないはず)

 

メンバー紹介


前提を話していて我々が何者か?という話をしていませんでしたね。以下のようなチームです。


kouty (AtCoderID: kouty)

y_1 の y 担当。998 や geoguessr が強いイメージがある。B2。

hato_ (AtCoderID: hato_)

y_1 の _ 担当。典型や音ゲーに強いイメージがある。B4。

ococo (AtCoderID: ococonomy1)

y_1 の 1 担当。この参加記の筆者。一応天才担当ということにもなっているが、コンテストで発揮できる天才度にはかなりムラがある。タイピングに強く、e-typing の自己ベストは627。B4 だが ICPC ラストイヤー。高身長イケメン。美少女でもある。参加記の文字数は多ければ多いほど良いと思っている。

winter (AtCoderID: winter_2521)

y_1 のコーチ担当。海外 Regional の参加登録は結構コーチに頑張っていただく必要があったり、海外旅行経験があったりと、かなり頼りになったしお世話になった。M2。


このメンバーからなる北海道大学のチームである。選手3人のレーティングは全員2000前後。

また、y_1 の自分以外の人も参加記を書いているので、それのリンクも載せますね。

winter-2521.hatenablog.com

hato336.hatenablog.com


どういう練習をしたかのやつ

Codeforces の gym に台湾の国内予選や Regional があったためそれをメインでやった。オンラインで練習する日もあったが、同時実装はもちろんなしの上、ライブラリも写経担当の ococo が手元で写経する→ discord に写経したものを貼る→それをコピペしてもらって使ってもらう、みたいな感じでやった。これでオンラインでも写経ミスに対する対応力の練習ができる。

また、ライブラリについては基本的に hato が用意した。ICPC 用にライブラリを pdf にできる良い感じのやつを見つけてもらい、それに必要そうなのを加えたり不要そうなのを取り除いたりしてもらった。写経をするのは基本的に ococo だが ococo はそういう良い感じのものを見つけるのが苦手でありデータ構造等の知識も少ない方であるため助かった。

戦略

ICPC 参加記といえば!!やっぱり戦略でしょ!!そのチームがどういう戦略だったのか見るの面白いし!!!

とはいえうちのチームは AtCoder のレーティングが全員近く、極端に尖った能力の人間がいるわけでもないしあまり面白い戦略は採用していない。

一番タイピング速度が速く一番英文を読むのが遅い(チーム内の英文を読む速度の差については諸説ある)のが ococo なので、セットアップ・写経周りは全て ococo がやる。過去問をやった結果前と後ろに簡単枠が置かれがちっぽいので hato/kouty が一番前と一番後ろから一問ずつ読んでいき、読めた方から内容と解法を伝えていく。ただし、ある程度より解法が複雑になると解法を自然言語で伝えるコストより内容を把握している人がそのまま書くコストの方が小さくなるため、伝えづらそうになったら途中からは読んだ人が実装し、その頃には問題文がめちゃくちゃ長い問題文以外の全部を hato/kouty のどちらかが読んでいることが多いためその中から解けそうなやつの考察に ococo も加わる。実装を詰め切れていない/実装に時間がかかりそうな問題しか残っていなかったら必要だと分かっているライブラリを ococo が写経をする。国内予選でも速解き力で序盤相当順位が良かったチームだった速解き力があるチームなのに加え、ococo のタイピング速度もありかなりペナ差で勝ちたいチーム・戦略となっている。

練習以外の準備のやつ

Taichung Regional に申し込みができたことを確認した後に、チームで discord 上に集まって飛行機や宿などの予約をした。自分も通話に参加していたがあまり協力できていない。コーチである winter さんがこの辺りについて色々頑張ってくれたので、そっちを読んでください。俺はただ、たまに「それでいいんじゃないですか?」「それでいいと思います」「それで良さそうですよね」などとたまに言っただけ。お前はいつもそうだ!この口出しはお前の人生そのものだ!お前はいつも失敗ばかりだ。お前はいろんなことに手をつけるが、ひとつだってやり遂げられない。誰もお前を愛さない。

それ以外に個人的にやった準備として、睡眠調整がある。調整をする前の睡眠時間について、眠くなったら寝る お昼過ぎに起きる 遊びたくて遊ぶ お腹減ったらご飯を食べる という感じで午前5時頃にならないと寝られない状態になっていた。しかしコンテスト当日は日本時間で午前7時頃に起きる必要があり、そのためには前日の23時頃に寝たい。しかし体内時計がそれを許さない、どなっていたため、2週間前くらいから睡眠時間を必死に後ろに倒した。完全な昼夜逆転を一瞬挟み、結果16時間ほど後ろに倒して21時頃に眠る生活に。B1~B2 の頃は生活習慣が終わりすぎていて1か月半で睡眠時間が一周するほどカスな生活リズムをしていたため、昼に予定があっても睡眠時間を後ろにずらすためのテクニックをいっぱい持っていた。それが功を奏したという訳やね。あの頃の終わりの生活が伏線として回収される日がくるなんて。人生何があるか分からないですね。

実際にあったことのやつ

※時刻は基本的に現地時間です。ちなみに日本と台湾の時差は一時間です。

※台中駅が本当は2つあり結構離れているのですが、説明・書き分けが面倒なので両方とも「台中駅」と表記しています。この2つは電車で20分くらい離れています。

11/8(土)

土曜日は基本的に ICPC の練習をしていたのだが、この週は STPC があったのでそれに出た。結果は Div.2 で2位と非常に好成績。強い人たちが Div.1 に出ていたとはいえ相当嬉しい結果に。

(その時のツイート貼ろうと思ったけど UCup あるからネタバレ避けてねみたいなのもあり張らない方がいい?ハッシュタグのミュートも効かなさそうだし。)

11/12(水)

最終確認の日。飛行機や宿を改めて確認したり、入国のために必要な埋める欄に必要な事項を埋めたりした。昔は物理的なカードに書き込むことが必要だったらしいが今は予めパスポート番号と必要な事項をインターネット上で記入すれば十分。便利な時代になったものですね。

11/14(金)

移動日。睡眠調整の成果もあり目覚ましなしで午前4時半頃に起きる。風呂入ったりダラダラしたりしながら荷造り。10時過ぎに札幌駅に到着し、新千歳空港に向かう。


北大勢で集まり新千歳空港で食事をしたりするなど。荷物を検査されたり出国をしたりするなどして、15時頃に飛行機に。
iPad で音楽等を聞きながら4時間ほど飛行機に乗り、現地時間18時に台湾に到着。

 

地下鉄・新幹線・電車を乗り継ぎ台中駅のホテルに。日本の感覚だと相当安いところだったのであまり期待していなかったが、結構広かった。(てかここ数年の日本の宿が高すぎませんか?特に都市部)

ホテルに着いてから、 hato 君がグローバル Wi-Fi のレンタルをしていたため、それのアクセス方法を確認する。ホテルはチームごとにとっていて y_1 は2人部屋が2つで、 hato 君は違う部屋だったのだが、ococo と同じ部屋の winter さんが eSIM が上手く繋がらなさそうだったのもあり、こっちに置いてくれた。

スマホWi-Fi にアクセスできたし次は iPad を繋ぐか~と思ってリュックを探すと iPad がない。え?いやいや。見間違いだろう。もう一回探す。やはりない。あ!飛行機だ!飛行機の中で iPad を使って、着陸直前に前の席のシートに入れたが、着陸してから eSIM がちゃんと動くかしか考えてなかった!!!ヤバいヤバいヤバい。いつもは飛行機とか新幹線とかの席を降りる時指差し確認してるのに。こういう時に限って、うわ~。どうする?今言うか?え?でも多分返ってこないだろうし。うわ~……。俺っていっつもこうだ……。元々かなりそそっかしい人間ではあるが最近は大分コントロールできるようになってきたと思ってたんだけどな……。うわ~。いや、大丈夫大丈夫大丈夫。あの iPad でやってたのなんてほとんどが TwitterYoutube でそれは他の端末でメインで使っているのをログインしていただけ。それにあの iPad も古くて正直そろそろ買い換えたいと思ってたから良いタイミング。大丈夫大丈夫大丈夫。いや、でもこういうタイプのミスってもう克服できたと思ってたんだけどな~……。

などと考えながら、このことを誰にも話さず風呂に入った後就寝。

11/15(土)

朝起きるとiPad のことは当然覚えているが一晩経つと落ち込んだ時の感情というのはすっかりなくなっているもの。良いことか悪いことか。

数週間前から行っていた睡眠調整のおかげでかなり早く起きることができ、同じ部屋の winter さんも同じくらい早起きしていたため、2人でホテルの朝食バイキングに。サツマイモのボール?みたいなのが美味しかった。

その後、北大勢で集まり台中駅から台中駅に。

 

プップー ブンブンブーン ブンブンブンブンブーーン

 

この Regional のホスト校である亜洲大学に着き、チーム登録的なことをする。英語表記は Asia University だが亜細亜大学ではなく亜洲大学である。(あしゅうだいがく、と読むらしい?)チーム名を伝え、パスポートと学生証を見せ、Tシャツとバッジを受け取り、チーム写真を撮影。必ず撮らなきゃいけないらしい。あとこのタイミングで他の日本勢(の一部)と会うことができ、自己紹介や軽い雑談をした。

この日はコンテストはなく practice の日。エディタ等の環境の確認を行う。事前にインターネットで言われていた「君たちにこういう環境を用意したよ」のやつのエディタ一覧に VSCode が書いてなかったがパソコンには VSCode が入っており、どういうことなんだ、本当に使っていいのか、と話題になったが、質問した結果使っていいらしかった。予め使える環境を書いていたところに VSCode が抜けていたっぽい?

また、説明のスライドについて繁体字と英語が両方書かれていたり、説明の時に中国語?台湾華語?での説明と英語での説明が両方されていたりと、現地の人に有利な方式がとられていた。これに関しては英語のみを徹底している Yokohama が非英語圏では珍しそうな気がするけどどうなんだろう。

その後、Meal Box という名のパンが4個入った箱を一人一つ貰い、台中駅に戻った。

 

ブーーンブンブンブンブーン ブブブンブンブンブーン ブンブンブーーーーーン

 

シャトルバスで台中駅に戻ってから台中駅のフードコートで食事。自分たちが座ってたテーブルから3つか4つくらい離れたテーブルにマルチ(ネズミ講ともいう)っぽい人がいた。日本のマルチと言えば昼すぎのカフェの印象があるが台湾のマルチは夜のフードコートなんだ。いや昼のカフェにもいるのかもしれないけど。数テーブル離れていたからよく見れなかったがパソコンの画面でいかにもネズミ講っぽい「こうやってあなたも儲けられます!」みたいなスライドを見せながらうさんくさい人が無気力そうな人に話していた。「ネズミ講っぽさ」は喋っている内容が分からなくても判断できるという学び。くれぐれも皆さんネズミ講には気を付けましょう。騙す方が一番悪いですが。

ホテルに戻ってからは ABC に出ず、順位表だけ見ていた。

すっげ~順位表。とんでもない回。こういうのもあるよね。とはいえ改めて見ると転倒数は 2 か。途中開いた時は DG も逆だったような気がする。

11/16(日) 

6時頃に起きて前日に貰った Meal Box のパンとその前の日にコンビニで買ったモンスターエナジーを飲み、うんちをする。いや、急にうんちとか言ってふざけやがって、と思われるかもしれないけど、うんちを無理矢理にでも出すことでコンテスト中のストレス源が一個減るのである。減らせるストレスは減らさなければならない。だから、うんちをひり出す。これは褒められるべきことですよ。

台中駅からシャトルバスに乗る。前日と同じところ。

 

ブーンブンブンブンブーンwwwwブンブンブーーーーンブンブンブンブブブーンwwwww

 

シャトルバスに乗っていると winter さんが、我々が乗った飛行機の航空会社であるチャイナエアラインからメールが来たと話していた。「iPad の忘れ物がある」という内容らしい。一回は諦めたとはいえ、さすがに「それ自分です」と伝え、winter さんのメールアドレスから予約してもらったためそっちでやりとりした方が良いですかね?とか言いながら自分の iPad に貼ってあったステッカーの画像を送った。これとどの席に座っていたかの情報で、強く一意に絞れるはず。iPad が取り戻せそうな俺は強い。お天道様すらも俺の味方をしている。

亜洲大学に到着後、割とすぐに荷物を預ける。その預ける荷物の中にはスマホとかもある訳だが、コンテスト開始までは一時間半くらいあり結構暇に。仕方なくその辺を歩いていたら喫煙禁止と書いているエリアにタバコが箱ごと置かれていた。パッケージをよく見ると日本語が書いてある。ピースの 10mg で、外にあったのだが何日も放置されていたのか相当汚かった。5本くらいしか残ってなかったし。近くに繁体字が書かれたライターもあった。そっちは台湾のなんすね。ライターは飛行機で運べないから?

その後退屈なので歩き回ったり歩き回らなかったりしていながら、東工大の tukuyom1 のメンバーと会い、話す。色々話していたら入場開始に。入場するときに改めてポケットに何も入っていないことを確認された。Yokohama はここまで丁寧じゃなかった気がする?入場に時間がかかっており、当初の予定から10分遅れて始まることに。

以下、コンテストの内容。ちなみに小見出しの問題名は AC のタイミングを基準につけているので必ずしも ococo が関わった問題ではないです。あと、自分以外の2人の行動を完全に把握している訳ではないので間違っている可能性があったり、若干時系列が入れ替わったりしている可能性があります。

A

コンテスト開始と同時に VScode を開き PC のセットアップする。まずコンパイルコマンドを打ち込んだ後、テンプレを打っていると hato が A 問題を読めたらしいので内容を聞く。A問題は値が3つ与えられて、最大値と最小値の差が一定よりでかかったらある文字列を、そうでなかったら別の文字列と中央値を打つらしい。内容を聞きながらコーディングしていたので中央値の取得が必要と知る前に最大値と最小値の取得を書いており、中央値を (a xor b xor c xor 最大値 xor 最小値) で取得した。コードを提出し AC (3分)。

M

それを打ち終わったあたりで kouty が M 問題を読めたらしく、内容を聞くと素直に BFS を書くと良さそう。そのまま BFS を書き AC (10分)。

E

そのあたりで hato が E 問題を読めたため内容を聞く。内容・解法は把握できたものの変な問題だなあと思いながら順列全探索を書く。そのままAC (14分)。

F

その後、再びテンプレの続きを打っていると隣でhato/kouty が同じ問題を考察しているっぽい。考察に混ざった方がいいか?などと迷いながらテンプレを打ったり、コンパイルエラーを直したりしていると F 問題が解けたらしい。問題の内容は把握していないが実装は軽いらしいので hato にいわれた通りに実装し、AC (27分)。

B

この辺りで順位表を見ると我々が通していない問題の中で B が一番解かれている。問題概要を聞きながら「歩きの方がバスより速いならバスに乗る意味はない」「バスの順番が前後することはない」「複数のバスに乗ることは考えなくて良い」などと話していると、hato が解けたっぽい。自分はあまり把握していなかったが hato が書けそうなので実装してもらい、AC (53分)。

L

hato が B を書いている間に kouty から解けそうな問題の内容をいくつか聞く。L 問題が中でも解けそうという話になり kouty と一緒に考える。「01列の区間 flip は階差を考えると2か所のflip になり、階差の列を考えると mod k ごとに完全に独立に考えていける」みたいなことを話している段階で hato の B の AC もでき、合流して3人で考える。色々話している間に割と方針ができたっぽいので kouty/hato に実装をしてもら他の問題を見る。順位表を見るとちょっとだが J が解かれているので J 問題を考え、サンプルを基に色々お絵描きする。データ構造で上手いことできてもおかしくない雰囲気はあるが分からんなあと思い、 順位表では I も同じくらい解かれていたため I も考える。めちゃくちゃ幾何だなあ、うちのチームは幾何誰もできないなあと思いながら考えると、まあ半分に切れるなら半分に切りたいし、そうじゃないならどっかのイチゴがギリギリじゃないといけなくて、それなら凸包をとりたい、とか思っているうちに、時間をかければ解けるのでは?と思う。そのくらいの頃にkouty/hato が実装していた L が、ペナを経つつもAC (149分)。

J

kouty/hato が L を解けた後 J に移り、ちょくちょく聞こえてくる話を聞きながら割と良い感じに解けてそうだな~と思う。そしてそれを聞きながら幾何ライブラリを解読したり二次方程式を解いたりする。ある程度 I について考えて一回解けたつもりになり、実装をするが実装をし始めてから同一視しちゃいけないものを同一視していることに気付くなどしたりして、結構困る。そうこうしているうちに J が割と解けたらしいので、頭をリフレッシュするために他のことをするのも兼ねて、セグ木を写経。J について実装や細かいところがまとまりきってなかったみたいなので、I の実装をちょくちょく進めたり条件や式を整理しながら J を実装してもらうなど。一回ペナってたみたいだったがその後 AC していた。(240分)

I

J が通せたところで残り60分であり、 I はあとはちゃんと詰められれば通せそう、 K は結構通されてるからそんな変なことしないのかもしれない、という状況に。ここで kouty が I に加わり hato が K に取り組むことに。ここからは I と K で片方が実装が詰まったらもう片方が実装を奪う、みたいな状態が続いた。 I の問題概要を kouty に伝え、基本は凸包、円と直線の交点を求めてから、その直線円を切った時の式が怪しいという話や、サンプル2を紙に描いたからそれを見せるなど。結果的にそこは大丈夫と分かり、半分に切ることができるかの判定がミスっているっぽいと分かる。kouty から「原点を含んだ凸包を取ると良いのでは?」と提案され、それを実装する。一回 WA が出たため提出したコードをプリントし hato に実装を奪われながらコードと睨めっこしていると、一か所コメントアウトしているところが間違っていることに気付く。そこを修正して提出したら AC (285分)。

K

I を通したタイミングで hato が K に提出していて、デバッグ用の出力とかを見ながら改めて提出したら通っていて、AC (289分)。

その後は10分しか残っておらず、解けそうな問題も残っていないためコンテストについて振り返っていた。ococo は最後の I について、最終的に通せたはしたものの結構凡ミスが多いことに気付きかなり落ち込んでいた。最終的に振り返ると I は幾何の典型にちゃんと慣れていればそこまで苦しまずに実装できそうな問題だったなあと。幾何にもちゃんと対応していきたい。

 

結果は9完に。戦略でペナ差で勝っていきたいなどとほざいていたが、9完中3問がラスト60分だから全く速解き型ではなく、結果的に9完内で一番下の順位だった。とはいえ前半の時間を効率的に使えたからちゃんと手を付けた9問全部を時間内に通しきれたのかもね。

 

コンテスト後はコーチの winter さんが戻ってきて、問題の感想とか Taichung Regional から公式に配信されてる Youtube がどんな感じだったとか聞きながら、荷物を取って移動。閉会式的なやつとかが行われた。コンテストのラスト1時間の提出は凍結され順位表からは提出されたという情報しか見れないようになっているが、それが通っているかどうかを発表する YesNo の時間に。我々は凍結後 3 問に提出したが 3問全部 AC だったため YesNo で3回順位が上がった。うれしい。

11~30位のチームが Silver Award ということで銀メダルを受け取った。

銀メダルではあるが銀製ではない。(というかマジの純銀のメダルが来たら相当ビビる)

閉会式・表彰式的なやつが終わってからは解散となり、またパンが4つ入った Meal Box を貰ってからシャトルバスに乗って台中駅に戻った。

 

ブーンブンブンブンブンブンブンブンブーーーーーーーーーーンwwwwwwwブンブンブンブンブンブンブンブンブンブーーーーーーーーーーンwwwwwブンブンブーーーーーーンwwwwンブンブンブンブ(←裏拍!?)wwwブンブンブンブンブーーーーーーーーンwwwwwwwwwww プップー プッププッププップー ブイイイイイィィィィィィィン

 

台中駅に戻ってからは夜市に行って観光する勢が多かったが、自分はホテルの部屋に戻って ARC に出ていた。Regional の成績が悪くて ARC に出ていたら「誰が出てんだよ」感があったがそこそこの成績が出せたが恥ずかしずに ARC に出ることができた。結果は散々。0完。A 問題は300点のはずなのに。得意なセットではないがさすがに元気がある状態ならここまでひどくはなかったはず。レートを70溶かしたが危機感を感じておらず、ただ危機感を感じていない状態には危機感を感じている。メタ危機感。


11/17(月) (day3)

この日は excursion として、外国チームの10チームが招待され台中のいくつかの場所を観光した。外国チーム10チームのうち7チームが日本人チームであることもあり、前の日のコンテストの話や他の競プロの話を他の日本人競プロerと話していた。宮原眼科という台湾の有名なアイスクリーム屋さんに行けてハッピー。台湾に行く前から話題になっていたが今回は機会がなさそうかな~くらいだったのでかなり嬉しいね。宮原眼科はトッピングにパイナップルケーキとかがあってさすが台湾と思った。さす台。

excursion が終わってからは新幹線みたいな乗り物で空港がある桃園へ。行きは自由席に立っていたのだが帰りは指定席を取ることができて座って帰れた。winter さんにチーム4人分の指定席をまとめてとってもらい、自分の分を各々払ったのだが、持ち合わせの都合上1000円札2枚と100台湾ドル札1枚というあり得ない払い方をした。

桃園に戻ると雨!台湾に上陸してからここまで3日間雨とは無縁だったが、最終日直前に雨に遭うことに。幸いほとんど屋根の下だけを歩いて移動できたからほとんど濡れることはなかった。

ホテルに着いてからは、お土産探しを兼ねて空港に移動。この時に行きの飛行機で忘れた iPad も受け取れた。本当にありがたい。ありがとうチャイナエアライン様。いや、チャイナエライン御中と言うべきか。

その後、北大勢全員で空港のフードコートで食事をしたりお土産を見て回ったりしてから、再び部屋へ。ococo/winter が泊っている部屋に hato/kouty も来て 台湾ビールを飲みながら色々話した。但し ococo だけは常備薬の影響で医者から飲酒が禁止されているため酒は飲まず。 色んなことを話したような気がするが、かなりの時間の割合が Championship の進出条件だった気がする。Championship の進出条件は人間が理解するには難しすぎる。この時間 yukicoder のコンテストが開催されていたためちょっとだけ触れたが全く解けず。多分家で落ち着いてたら解けた問題もあっただろうけどメモできない状況だとまあ無理。あと疲れてるし rated じゃないしで本腰入らなかったのもある。言い訳の塊ですね。

11/18(火) (day4)

帰宅の日。この日は早起きして飛行機に乗るだけだった。なんと5時半起き。日本時間でも6時半である。飛行機に乗ってからは寝たり起きたり。ぐっすり寝たかったが飛行機の中ではそうもいかない。うるさいし揺れるし狭いし。無意識に両側の肘起きを占領していて申し訳なくなって小さくなるけどいつの間にかまた肘起きを占領してしまったりしていた。人間に無意識をコントロールするのは不可能。不可能だが諦めてはいけない。無意識に抗い続けるのだ。理性を持った生物として……。あと偏西風とかジェット気流とかのおかげか行きより大分早かった。

新千歳空港に戻ってからはフードコートで食って帰る。和食を食べている人もいたがオイラは担々麺とチャーシュー丼を食べた。数日台湾に滞在してから日本に戻ってから一発目の食事を担々麺にしても良い。常に新しい選択肢を提示し続けろ!


感想など

コンテストでこんな感じだったよ~のところで順位に言及してなかったが全体で16位で、同校制限等を除くと Taichung Regional で10番目なんですよね。Taichung Regional 内から Championship に進出できるのは 9~10 枠くらいと予想されているらしいのでかなりボーダー付近である訳ですよ。

そして、 Taichung Regional 内の何番目かというのは、先ほども触れた通り同校制限にも関係していて、これはある大学のあるチームが何かしらの Regional で優勝するとその大学の他のチームが順位表から除外されて他のチームが Regional 内で何番目かが変わる。起こる可能性が一番高いケースを具体的に言うと、National Taiwan University のどこかしらのチームがどこかしらの Regional で優勝すると我々の Championship 進出はほぼ確実となります。

そんな訳で 11/17 に Championship の進出条件を色々話している時とかに、色んな Regional の参加チームを見ていて、結構 National Taiwan University の強いチームが色んな Regional に応募していることを確認していて、Taichung Regional は Asia Pacific 地域で行われる7つの Regoinal のうち2番目であるため、これらは全然起こり得る未来である。つまり我々が今することは National Taiwan University 全力応援なんですね。頑張れ頑張れ!キミたちならいける!

そんな訳で、喜ぶとぬか喜びになるかもしれないけど Championship に進める可能性は割とあるんじゃないかと思っているので、ここ数日ソワソワしております。しかし我々にはまだ Yokohama Regional がある。Yokohama Regional でもっと良い成績を出せばこんなソワソワする必要がないのである!(もっとも Yokohama までに大分 Regional が行われるためその時には状況が変わっている可能性もあるが)Championship 進出のために有利なスコアを取る、という点について Yokohama で Taichung より良い成績を取る難易度は結構高いが、起こり得ないということは全くないので頑張りたい!といったところ。頑張らねば。

自分は今年で ICPC ラストイヤーで、今まで Championship に進出したことはないが、今年最初で最後の Championship に進めるかもしれない。そうするとまだまだ気を抜けない状況になっている。こうやって改めて今の自分が置かれている状況を書いているとモチベーションが刺激されるね。

あと、来年以降も ICPC 出場権がある後輩が今回の Regional を経て海外 Regional に行くことに結構積極的になっていたのも良かった。来年以降の自分が出ていない ICPC についても、自分が在籍している/していた大学が色んな Regional や Championship に出てワクワクしたいし。

いや、思考が OB みたいになってきてしまっていますね、まだまだ現役。数週間後に Yokohama Regional もあるし、そこで終わるつもりもない。頑張るぞ!

最後に感謝を。チームメイトやコーチをはじめとして、今回の y_1 に関わってきてくれた皆さん、そして作問陣や当日の Regional のスタッフの皆さん、ありがとうございます!!!

JAG 夏合宿 2025 参加記 (ococo 視点)

いや~、それにしても参加記の書き出しって毎回どういう感じだったか忘れますね。長文の始まりと終わりは難しい。

お前誰?

おここと言います。AtCoderID は ococonomy1 です。北海道大学に所属している B4 です。ICPC は今シーズンでラストイヤーです。今シーズンの ICPC のチーム名はy_1です。夏合宿は2023年に参加して以来で、今回で2年ぶり2回目です。

今は帰りの飛行機の中で機内モードはてなブログを開いてこれを書いています。ありがとうキャッシュ。

国内予選の参加記はこちら

ococonomy1.hateblo.jp

 

実際こんなことがあったよのやつ

day1

札幌の自宅から当日に向かった。6時に起床し6時40分に家を出る。眠すぎ!8時頃に新千歳空港に着き、飛行機のちょい遅れ等あり11時頃に羽田空港に。山手線の人の多さに驚きながらオリンピックセンターに着いたら12時20分とかになっていた。数日前に「集合時間が早くなったから遅れそうだったらメールしてね」と JAG から言われていて、「いや~、さすがに遅れないと思うんですけど~、一応ね~」という旨のメールを送ったら本当に遅れてメール送って良かった~になった。遅れてと送ってって似てるな。

集合場所の部屋に着いたらすでに自己紹介が始まっていて、着いてすぐくらいに自分の番になったため「今来たばっかりで何がなんだか分からないまま自己紹介してます」と言ったらちょっとウケた。

その後、同じ大学の人たちを見つけて近くのテーブルに座る。今回北大で自分以外に来ていたのが Akai_kobito の titan さんと today さんで、その二人もあと一人欲しいという感じだったので、レートもあまり離れていないため夏合宿中はこの3人でチームを組むことに。ちなみに ococo,titan,today は全員同じ年度に北大に入学した同期であり、B2 の時からの知り合いだがこの3人でチームを組むのは初めてのはずである。エモいね。チーム名は titan さんと today さんがいるチーム名である Akai_kobito と ococo がいるチーム名である y_1 を組み合わせて Akai_y1 に。ねじ込みやすいチーム名にしていて良かった。

※ここからコンテスト中の出来事を書くフェーズになりますが(特に自分があまり関わっていない問題について)記憶違いがある可能性が結構あります。あとコンテスト中に起きたことを書いているところは基本敬称略です。(day2,day3 も同様)

AB

前半2問が簡単枠であると明言されていたので、とりあえず3人で読みながらやろうということに。titan がテンプレを書いている間に ococo と today で A 問題を読んでいたが問題文の読解速度で遅れをとり、B 問題もずっと問題文が何を言っているか理解できず、「拾える部分の雰囲気的に昇順か降順のどっちかにソートした後問題文で言ってる通りの操作をすればできそうなんだけど、問題文で言っている通りの操作の内容が分からないなあ」となっていた。そうこうしている間に A と B を AC してもらった。(4分,9分)

L

B の実装に入った段階で自分は後ろから読むことに。後ろから見て1問目の L について、商列挙っぽいと思い、時間をかければ通せそうな問題だと思う。5h で歯が立つ問題もそう多くないはずなのでここに突っ込もうということに。色々メモをしながら考察をしたり、B の実装が終わってパソコンが空いた段階で実験を書かせてもらったりして内容を見たりして考察を詰める。色々整理しながら f(n) = n/1 + n/2 + ... + n/n (少数切り捨て)を結構使いそうと言うと today にそれができるライブラリを持っていると言われ使わせてもらうなどした。O(Nsqrt(N))だと思っているコードを出すと TLE するも、でかいテストケースを作りどこで時間がかかっているか調べてもらうと f(n) を求めるのに時間がかかっていそうだったためメモ化したら無事 AC。(57分)

F

L を通した後順位表を見ると F が割と通されていたのでこの問題をやることに。titan が既に問題を読んでいたため概要を聞き、3人で話し合いながら「LCA より下にいる時はとりあえず上に行きたい」「下に行くべき時について、行けるなら行っても良い」「行くべきだけど行けない時は反対に行って上に戻るのが良い」「とすると偶奇が大事そう」「S の長さが奇数ならもう一個 S をつけて偶数にするとラクそう」みたいな流れで解法に辿り着き、自分が実装することに。二分木のライブラリを titan が持っていたためそれを使わせてもらいながら、実装ミスを繰り返しながらも AC。(106分)

G

F を通した後 ococo は D と J を考えていたのだが、その間に today と titan が G 問題に取り組んでいた。あまりどういうことが起こっていたかは知らないが、遅延セグ木の写経のどこかしらでミスっていたらしく値が合わないということが合ったらしい。結構苦しそうではあったが最終的に AC していた。(283分)

J

titan,today が G に取り組んでいる間主に J を考えていた。5つのブロックに分けたいから割と素直にやって N = 75 が達成できることは気付いていて、そこから「13個のノードで[1,63]を達成できるようにするためにはどうすればいいか?」という方針で色々考えていたが解けず。コンテスト後の解説で「かなりとっつきやすい見た目なので、誘惑に負けないよう注意」と言われて、はい……となった。構築に取り組むのは他に解けそうな問題がない・順位表情報的にそこまで難しそうじゃない時に限るように気を付けます……。

 

結果

ABFGL の5完で13位。

コンテスト後

その後は部屋に行き、同じ部屋の人と自己紹介など話した。夕食を食べる・解説を聞く・風呂に入る・歯を磨く・AHC に出ないなどのことをして、就寝。普段家で寝る時は ASMR を聞きながら寝ていて、この二泊のために普段聞いているものがオフラインでもちゃんと聞けることを事前に確認していたにも関わらず、イヤホンを家に忘れていて静かに絶望していた。幸い寝不足だったこともあり非常に疲れていたため ASMR なしでぐっすり眠れた。

 

day2

朝飯食った。売店行った。コンテスト部屋行った。コンテストやった。

ペンを忘れていたため売店でペンを買ったのだが大抵のペンが売り切れていて赤いフリクションを買った。ちょっと見づらい。

この日も day1 と同様 titan,today と Akai_y1 で参加。A と B を共に3人で読むのは効率悪くないか?という話になり today が A 問題を、titan,ococo が B 問題を読むことに。

B

最初に読んだ問題。概要を把握するのにちょっと時間がかかったが、読解できてからは「今キーボードにない文字をタイプする必要がある時、次出てくるタイミングが一番遅いのと入れ替えたい」と割とすぐに思えた。そのまま実装して AC。 (11分)

A

B を実装し終えた段階で A を today に実装してもらうも合わないらしい。実装が合わないと言われて問題概要を聞きながら「これサンプルがなんでこうなるか分からんな」みたいな話をしていたのだが、どうも重み付き平均を (x,y) にしなければいけないところを比を (x,y) にするべきと誤読していたらしい。それに気づいてから today が実装しなおしAC。(29分)

K

AB の二問が終わってからしばらく全体で AC が生えず、チームでこの問題をメインで考えていた。「永続平衡二分木があれば解ける」と titan が言っていて、「それでも解けるかもしれないけど写経が大変そうだしさすがに他の解法があるんじゃないか」という感じになり、定数倍も厳しいかもしれないという話になり別の解法を考えることに。しかし別の解法を思いついても「これができるデータ構造ってある?」的なことをデータ構造に詳しい titan に聞くと「その方針でも永続平衡二分木がいる」的なことを言われた。ちなみにこの後も何回かこの問題の話題になったが最終的に解けなかった。

FG

そうこうしている間に順位表を見ると FG の AC が生えていて、この二問を考えることに。自分は F を考えながら「実験書いてくれたらエスパーできるかも?」と思い、titan に F の実験を書いてもらいながらそれまで titan,today の二人で考えていた G の概要とその時点でできていた考察を聞いていた。 それまでの考察の怪しい部分を指摘するなどしていたら解けたらしく、そのタイミングで F の実験を書いてもらったので実験結果を印刷してもらった後に G の実装をしてもらうことに。長さごとに特定の popcount で操作回数が減りがちなことや実際に操作回数が減る popcount を調べ mod3 で良い感じに周期性がありそうだと思うと、そのタイミングで 00->1 が popcount が1増え、11->0 で popcount が 2減り、 +1 と -2 は mod3 で同じ値なことに気付き mod3 が重要なことを確信。また「0101……」みたいなパターンで操作回数が増えることは実験を書く前の考察でも気づいていて実験でも確かにそう出たためそれらを一つの解法にまとめて提出。最初は WA が出たが、「全ての答えが(長さ-1)だった場合」を基準にプラスやマイナスを調べていたのに対し、その基準の値の計算がずれていることに気付いたためそこを修正して AC。(181分)

その後 today が G を実装し、最大値の最小化・合計の最小化等の誤読があったらしいもののそれまでの考察がめちゃくちゃ無駄になるということもなく改めて考察し直すことで解けたらしく、AC。(202分)

L

その後 K を titanが、 L を ococo,today が考えることに。実はこれよりちょっと前に ococo,titan で L を考えている時間があり(どのタイミングか忘れた)、結構なケースで動かすのを1個以下にできそう、という話があり、その時に

####.
.<><>

みたいなパターンだと二個動かすことが必要、という話になっていた。そこから「ブロックを良い感じにエッジっぽくして'.'をノードにして、そこでパスを繋ぐことができたらそこをずらして聞かれていることが達成できるのでは?」と思う。言い換えた後の最小パスを見つける問題も地味に面倒だったが、頂点倍化・01-BFS を基に全域木的なものを作る、などの方法を組み合わせてなんとか AC。(288分)結構実装が大変だったが、 today に実装を手伝ってもらいながらなんとか書ききれた。

結果

ABFGL の5完で14位に。ちなみに4完も6完も複数チームいたが5完は我々だけだった。

コンテスト後

この日は懇親会だったのだが解説を聞いた後に結構時間があり、その間に「day3-writer予想コンテスト」なるものが生えた。day3 の writer を予想して google フォームに送るらしい。自分は

・さすがに単独ライターということはないだろう

・わざわざ予想コンテストが生えるくらいだから競プロ界隈で有名な人だろう

・わざわざ予想コンテストが生えるくらいだから推測可能な組み合わせだろう

とすると ICPC の、今年は既に参加権がない有名なチームか……?と予想をたて、potatoさん、tatyamさんが会場に来ていることに気付き、それに noshi さんを加えた tonosama の3人をフォームに送ったが外れた。ワンチャンあると思ったんだけどなあ。講評を聞くと去年の夏合宿や今年の模擬国内の writer を調べてなかった私の精進不足ですという感想に。

懇親会ではバイキング形式で料理を取ったり先述の writer 予想コンの結果発表をがあったりした。色々な人と話せてハッピー。そういえば懇親会の料理を取るゾーンについて、最初に順路を示されなかった結果多くの人が自分の利益のみを評価関数に入れた貪欲法で動いていたため、かなり列が終わっていた。(具体的に言うと、左右両方から列が始まっており、真ん中でその列が衝突していた。)

部屋に戻った後は ABC に出た。疲れもあってか、なかなかの大負けに。

高速メビウス変換を履修できてよかったとしよう。ABC が終わった直後に大浴場に向かい、「競プロerで混んでるんだろうな~」と思っていたが、競プロer以外があんまりいなかったためそこまで混んでいなかった。

かなりレートが冷えてきている。

day3

最終日。(執筆時点で)今日。もう終わるの早すぎる!という気持ちになっていた。day2 は朝起きてからちょっと時間的余裕があったが、この日はシーツを畳んで提出する、荷物を全部かばんにまとめるなどのタスクがあったため忙しかった。

かさばりという概念の理解がちょっと深まった気がする。

その後、コンテスト部屋に行った後にコンテスト。この日も day1,day2 と同じく titan,today と akai_y1 で出場。

A

today が問題文を読み、「結構難しいかも」と言いながら問題概要を伝える。「6*キューブの数から6近傍を見て接してる面の数だけ上手いこと引いたらいけそう?」と言ったところ、考察の方針が立ったらしくそのまま実装してもらい AC。(9分)

B

today が実装をしている間に読み、「コストが X 以下のものを全部選ぶ場合 N 個選べるか?をにぶたんすると良さそう」と思う。 A の実装が終わってからすぐに実装に入ったがなかなか値が合わない。色んなパターンを入力して原因を探っていたら入力を受け取るところで一か所変数名を間違えていることに気付いた。その後修正したら値が合うことを確認して AC。(27分)

H

この段階で順位表を見ると H 問題が結構解かれている。問題概要を聞き、ちょっと考えて ococo が「mod をとった後に一番左と一番右の値の差が変わっていたら、途中に 0 があるからダメでは?」と気付き、その時点で言われていた「L-1 で mod を取りたい気持ちがある」と組み合わせて today が L-1 で mod を取り続ければ良いと気付きそのまま実装。そのまま AC (37分)

J

問題概要を ococo が読んでいて伝えると today が「最小パス被覆では?」と言い実装を投げる。その間に他の問題を ococo,titan で読んだり考察したりしていたのだが、複数のパスが同じノードを経由しても良い・そもそも DAG じゃない、などの理由で最小パス被覆でないことが割と経ってから判明。その後改めて考えなおしたら「答えが1なら一筆書きだからオイラー路の判定になる」ということに気付き、そこで ococo が N 筆書きできる条件について一筆書きできる状況から次数のずれが1個分増えるごとに必要な筆の数が1個増えることを思い出す。実装方針を today に伝えてそれを実装してもらいなんとか AC。(94分)

FK

J を today が実装している間にococo,titan で問題文を読んだり順位表を見たりして F と K を取り組みたいという話に。問題文を読むと個人的に F は自分がかなり得意そうな設定+他二人があまり得意そうなイメージがなく、K は titan が「典型っぽい見たい目な気がする」的なことを言っており、また問題の雰囲気的に today も得意そうなイメージがあったため、二人に K を投げ自分は F を一人で考えることに。端の0は無視して良くてそれを無視した時の端は1じゃないといけなくて、L を 0,R を 1 にした時の転倒数を考えると良い性質がありそうで、みたいなことを色々考えていた。一回操作するごとに A とその階差がどういう風に変化をするかについてかなりの時間良い性質がないか睨んでいたが、なかなか答えに繋がりそうなものは得られなかった。K の方も良い感じに詰めつつなかなか仮定が間違っていたりと大変そうだったが、かなりの時間を経て AC してもらう。(202分)その後、 L の考察を today,titan に伝え、さらに色々話していると、A の偶奇が「初期状態と最終状態で L/R が一致しているか?」が一致することに気付き、その前から考えていた「実は L の個数は A[i] の最大値のうち一番左の場所に一致しているのでは?」という仮定を使って、 L の個数を決め打ったら O(N) で答えを構築できるためそれを書いてみる。一回目の提出では WA が出たが、そのコードがとりあえず答えがあると仮定してからできた LR 列について実際に答えが一致しているかをchecker で判定しており、ここに誤りがあることに気付いたためそれを checker を書いてもらった today にそのまま修正してもらって AC。(249分)

E

残った時間で E を考えていたが WA しか出なかった。「最小化と最大化で全然違う問題なのでは?」という話になり、自分は最小側を担当しており、ある文字に着目した時圧縮できないならそれは他のところでもそのままにした方がよく、そうじゃない場合全部圧縮してよい、としたがどうも違ったっぽい?最大化の方ではフローを使っていて、最小パス被覆かと思ってた時間があった J 問題で出てきたフローを使えたらしい。

結果

ABFHJK の6完で15位。3日間で 13位→14位→15位と非常に安定(?)していた。安定するならもっと高い順位で安定したかった感じはある。

コンテスト後

コンテスト後は結構すぐに解散になり、羽田空港に向かうことに。16時30分とかに解散だったが乗る飛行機が21時ちょい前に発のやつだったため「暇すぎる!」となり急遽ちょっとだけ東京観光。知らない街を散歩することを観光として楽しめる人間であるため、乗換駅である新宿で降りて街を歩いた。新宿はサブカル的な街でもあるという印象だったが駅周辺しか歩かなかったためサブカルの風味はあまり感じられず。てか地上に出るの難しすぎ!食事もこのタイミングでとった。

その後羽田空港第一・第二ターミナルへ。羽田空港はあまりに広く、自分の心かと思ってしまった。あと空港の搭乗口近くの待合室的なところで隣に座ってきた人が酒臭い息を吐きながらイヤホンをつけずに音を出してスマホでテレビの無断転載を見ていて愉快だった。その後飛行機に乗り、書いてある今に至る。記録を書いていたら「今」になってしまった。この後細かいとこ詰めたり改めて全体通して読んだりとかして公開は明日以降になってるんだろうなあ、てかコンテストの内容まだ書いてなくてそれ以外のパートを先にやってるんだよなあ、と思っています。←2日後の自分です。5h*3のコンテストの内容を思い出しながら文章にまとめるのしんどすぎました!

その後、半袖しか持ってきてなかったけどこの季節の夜の札幌寒すぎ!と思いながら帰宅した。(未来予知)かばんがめちゃくちゃ重いのでそれを背負うだけで運動になって意外と寒くない可能性もあるな……。

 

感想

楽しかった!!!

自分は普段割と人見知りな方なのだが、この3日間はあまり人見知りを出さずに色んな人と喋れた気がする。成長? contestant として参加した人の中ではかなり年齢が上の方だし、夏合宿も一回経験しているしで、無意識に自分が引っ張らなきゃと思っていたのかもしれない。

ただ一回以上他のオンサイトとかで会ったことある人だったり、オンラインででも有志コンでチーム組んだことある人だったりとかとは、せっかくの機会だし喋りたいなあと思っていたのだが、結構喋れなかった人も多くて残念。喋れた人もまあまあいたので単に知り合いが増えたのかもしれない。よし!いい話になった!

あとここ最近割と競プロのモチベが落ちていたのだが割と復活してきた気がする。またコドフォとかいっぱい出たいですね。

最後に、こういう機会を作ってくださった JAG の皆さん、作問をしてくださった皆さん、そして夏合宿に関わっていた全ての皆さんに大感謝です!皆さんのおかげで3日間楽しく、また競技プログラミングのモチベーションがかなり刺激されました!皆さん本当にありがとうございます。

 

p.s. 今回私はかなりの時間眼鏡をかけていたのですが実はガラスすらないフレームだけの伊達メガネでした。気付いた人はいたかな?(おここは目が良いので、よく見るとたまに眼鏡をかけていなくても周りが見えていないとおかしい挙動をするぞ!)

 

おわり

ICPC 2025 模擬国内・国内予選参加記(おここ目線)

参加記ってどんな雰囲気で書いてたか全然覚えてね~~~

パッションでいくぞ!

 

チーム紹介

今年は北海道大学から「y_1」というチーム名で参加した。全員の AtCoderID から suffix を一文字ずつ集めている。なんでこういう方法でチーム名を命名したのか忘れたな。メンバーについては以下の通り。

kouty(kouty)

y_1 の y 担当。C++ メイン。本格的にチームを組んで一緒にするのはこの ICPC 国内予選が初めて。数え上げに強い。 2024年に HokkaidoDekkaido で Yokohama Regional に行ったことがある。国内予選のタイミングでのAtcoder レートは 1893。

はと(hato_)

y_1 の _ 担当。Python メインだが今回は C++ で書いてもらった。2024年度は .Shaco でこの参加記の著者であるおここと同じチームで出た他、おここと一緒に色んな有志コンに同じチームで出ていた。高度典型・実装力に強い。過去二年 Yokohama Regional に行けそうなギリギリのところで国内予選を通過できていない。国内予選のタイミングでのAtcoder レートは 2060。

おここ (ococonomy1)

y_1 の 1 担当。C++ メイン。この参加記を書いている人。チームの中では一番 adhoc な問題が解ける考察力寄りだとされているが、本人的には考察力の安定性に自信がない。あとタイピングが速い。2023年に elephant_spaghetti で Yokohama Regional に行ったことがある。ICPC ラストイヤー。国内予選のタイミングでのAtcoder レートは 1962。

 

こんな感じのメンバーである。北大は例年ドラフトでチームを決めていて、参加する人の中で一番レート(その時点のレートか Highest かはその年による。今年は過去一年以内の Highest だった)が高い人が他の2人を指名して、選ばれなかった人の中で一番高い人が他の2人を指名して、……を繰り返していく。今年は北大に在籍していて ICPC 参加権があるHighest 黄色が3人であり、その3人でチームとなった。(今北大の競プロサークルである HCPC に所属している人で黄色中位以上がいないためせめて一人は欲しい感じはある。私含めて頑張りたいですね。)

 

チーム決め~模擬国内

チームメンバーを正式に決めたのが5月であり、そこから国内予選まで2か月もないため急ピッチで立ち回り等を練習する必要があった。基本月曜にサークル活動があり、それ以外にも何回か他の曜日にチームで集まって練習をした。国内予選や模擬国内の問題はセット通して全員が解いてないことがない(というかはと君が解いてない問題があるセットがほとんどない)ため、こどふぉの過去問の Div.2/えでゅふぉ や combined を中心にやった。一回結構立ち回りに失敗した回があり、その回では考察が割と進んだけど最終的に通せなかった問題が2問あった、さらにその2問どちらについても解法をチーム全体で共有できていなかったということがあり、これは昨年におここ・はとが属していたチームである .Shaco の国内予選の負けパターンにも共通するムーブであったため、序盤の問題でもペナが出たらチーム全体で解法を共有しようという話に。AtCoder レーティングは学内一位であり、かつ北大から1チームも Yokohama Regional に進んだチームがなかった回はかなり珍しいため、安定した立ち回りをとれば国内予選を通過できる可能性は高いだろうということもあり、一問一問慎重に行くことに。

また、最強コン予選(ARC201)ではチーム全体で5完して「これが国内予選なら……」という話が何回か出た。

 

模擬国内

国内予選の6日前に JAG によって行われること模擬国内予選。ちなみに JAG のページと言えば各々がチームのメンバーを発表?することで知られるチーム一覧のページだが、チームメンバーもこの日に書き込んだ。

 

 

このページは模擬国内の参加記も兼ねているため、模擬国内の参加記も。(下の方にある国内予選の内容と違って数日後に書いているから記憶がはっきりしてなくて分量がちょっと少ないです。)(あとここからチームメンバーの書き方がアルファベット表記・呼び捨てになります。)

開始したら ococo が A を開き、2分で AC。B を読んでいた kouty に「問題文は読めたがサンプルが合わない」と言われたため入ろうと思うが説明してもらってる間に自己解決したらしくそのまま通せた。これをやっている間に hato が C を通して、D を読むことに。「1文字目は明らかに '('  で2文字目最初の2文字で括弧列になるなら '(' だしそうでなければ ')' だなあ。あと N 回までしか聞けないらしいから一個のクエリについて一文字ずつ確定させていきたいなあ。」と言っていたらスタックに積みながら判定するとラクそうだと気付きそのまま実装に。'?' を出力し忘れて1ペナを吐いたがあまり時間をかけずに通せた。(コンテスト後に構築・インタラクティブはこういうフォーマットのミスが起こり得るし実装しなかった人がコードを動かしてみてサンプルが合ってるかどうか確認するのも良いかもね、という話をした。)これを実装している間に hatoと kouty が E 問題の考察ができたらしく、構文解析だから実装は重いが考察はそんなに重くないし間違ってなさそうらしいという話を聞き、hato に実装してもらいながら kouty と F を考えることに。O(N^2) が許されてるし辞書順最小を求められているから O(N) で valid かどうか判定できたら前の文字から順に A を試して B を試して C を試して……、とできる、という話になり、ここから約2時間、いろんな考察を生やしたりはと君に全探索+naive を書いてもらったり(最初は ococo が naive を書いたがなんか合わなかった)したが結局通せず。E/F 間は割と崖っぽい感じでそこの手前までを時間かけずに解けたのは偉かったと思う。

模擬国内~国内予選

月曜日にサークルで練習した後、毎週木曜日にやってるけど今週はやる?みたいな話になったが、立ち回りもどう動くか割と決まっていて「直前にチームで練習してそこで調子悪かったら本番が気分的に嫌」という話になりやらないことに。各々当日にパフォーマンスが出るように過ごした。ちなみに自分はモチベーションを上げるため、この参加記の国内予選までに書けるところ(模擬国内の話とか)は予選前に書いた。コンテスト後に書くことが減らせて一石二鳥。

↑と、ここまでを水曜に書いていたのだが、木曜は緊張で何かしていたい感じだったので、精神統一を目指して神社に。前厄であることが判明したが、浪人していない男性のラストイヤー組はほぼ全員がそうなのである。おみくじは引かなかった。絶対に凶を引きたくなかったため。

 

 

国内予選本番

大勝利!やった~~~~

↑これは国内予選前に参加記をどんなフォーマットで書くかを決めてる段階で書いてる。前祝いというやつですね。

マジで通過できた!やっぱ前祝いや!

 

以下、コンテスト中の話を。(特に自分以外の2人の行動については記憶違いがある可能性が結構ある)

ABC

過去数回の練習から A 問題は ococo がやることに。コンテスト前に印刷方法を確認しておいて始まったらすぐに印刷した後 A 問題を読む。「同じ問題有志コンで見たことある気がする?」と思ったが、多分この時思い出していたのは KUPC2024 - E で改めて見てみると全然違った。

atcoder.jp

計算量を削ることもできそうな見た目ではあるが A 問題だし大丈夫だろうと思い制約をパッと見て大きくないので二乗で計算するコードを書いてAC(0:01)。B 問題を読んでいた kouty、C 問題を読んでいた hato が共に問題文を読んですぐに実装にできそうな感じだったので D を読む。kouty が B を実装している間は hato と一緒に読み、「N,M の値が小さそうだから周期を全探索したい」的な話がでてきたところで kouty が B を通し hato が C の実装に移る(0:04)。kouty に問題の概要と全探索したいという話をすると、お互い多少の嘘方針を生やしながら「valid なら縦・横それぞれで見た時に種類が2個しかない」という話が出てきて、それならランレングス圧縮を見ることでできそうと思い、そのくらいのタイミングで hato が C を通した(0:13)ためそのまま D の実装に移る。今回はライブラリを使えるため、ABC 速解き用に作っていたランレングス圧縮のコードでちょっとラクができた。一部縦横がごっちゃになってサンプルが合わないタイミングがあるも、そこまで時間をかけずに修正をできて AC(0:24)。これを通せた時点で全体3位で「今コンテスト終わってくれ!」になってた。

D

ococo が D の実装をやっている間に hato・kouty が E を読んで考察をしていてその内容を聞く。根から遠い方に時間ギリギリのところがあったらそこの上にその制約を良い感じに伝播させていきたい、みたいな話があり、複数の子があるとそうはいかないかも?みたいな話になったが、それならギリギリの方から行けばいいはず、みたいな話をでてくる。それを使って木 DP を書けそうだが結構実装が重そうな気配があり全員が実装をシブっていたが ococo が書くことに。その木 DP を書いている途中で hato が「新しい点に行く度に行ける点が増えて木の形が変わるから N 回木 DP しないとまずそう?」的なことを言い、二乗が通る制約なのにそれをしないと O(N) で違和感があるという話があったため縮約パートを付けくわえる。何度か小さいバグらせをしたがサンプルが合ったため提出。実装には全く自信がなくて通らない可能性も結構高いと思っていたが、一発AC(1:07)。本当に嬉しかったしめちゃくちゃ安心した。

EF

ococo が E の実装をやっているときは hato に実装を見てもらったり方針を指示してもらったりしていたのだが、その間に kouty が F と G に目を通していて問題概要を聞くことに。G は幾何で見た目がヤバいため F について考えていて、その間に ococo は H を見ていた。H は ears っぽい形だから耳 DP ができそう + ある '(' について ")()" の形になっているかそうでないかで開き括弧を何回踏めるかが大きく変わる、みたいなことを考えていた。細かいところを詰めるのがしんどそうと思い F に戻って考察を聞く。なかなか良さげな考察が出てこない+パソコンが空いていたため「ある文字列から作れる文字列を全部出力する実験コードを見てみたい」と言い hato に書いてもらう。すると考察中には作れなさそうと思われていた aaaaabbbbb -> ababababab みたいな形ができることが判明し、最初は実験コードのバグか?という話になったが操作列も一緒に出力させてみたところ suffix から順に作っていけばいいと分かり、既に sort する方法は分かっていたらしいため kouty が実装。無事通してもらった(1:44)。

G

この時点で D までがかなり素早く通せたのもあり6完内でかなり上の方におり、 G は訳が分からんし H は通してるチームの少なさ的にそんな単純じゃなさそう、という話をしていた。(H はこの時点で耳 DP の遷移を考えていたが面倒が多いなあと思っていた。)とはいえ G がどんどん通されているし幾何ライブラリが必要なタイプだったらここまで通されないはずなので幾何的な考察さえできればそんなに実装で苦しむタイプじゃないんじゃないか?ということになり3人で G を考える。なかなか良さげな考察が生えなかったが、終了30分前くらいで「基本的に側面は三角形になりそうで四角形になる場合が特殊」「入力の与えられ方が点の位置とかじゃなくて角度なのがかなり変」みたいなことを話していると kouty が「対応する辺が平行になると四角形の側面ができるから平行になる辺の組を固定して全探索すればいいのでは?」的なことを言い、それを聞いた ococo が「それだ!!」となりそのコードを書くことに。kouty は大まかな方針が分かっただけで細かい実装は浮かんでいない風だったが ococo がその方針でかなり自信があったため、残り時間が少ないのもあり突っ走らせてもらった。角度を管理するにあたって360度で引き忘れていたり90度と270度を同一視するかどうかが分からなくなったりしながらもサンプルが合ったため提出。WA を出しその後細かいところのコードをすっきりさせてもう一度出したが WA。ここで入力のフォーマットが下9桁あることを hato に指摘され、さらに360度まで扱うことを考えると、今まで 1e-9 にしていた eps を 1e-13 にする必要があることに気付いた。これとほぼ同時に hato に1e9倍して整数で管理すれば良いことを指摘されたが、一旦 eps の値を変える方が時間が少なかったためそっちを提出しAC(2:47)。浮動小数点に対する態度としてあまり褒められた態度ではないが時間が少なくて焦りもあったし仕方がない。

コンテスト終了まで

H は考察を詰めて実装をし終えるまでとても10分ちょいでできそうな感じではなかったし I は問題文に目を通した程度だし、この時点で順位表を見るに通過はほぼ確実だっため順位表を見ていた。「東大・京大・科学大は全完しないと駄目だしなんなら全完しても確実ラインの10位に入れないの大変すぎる」みたいな話をしたり、学内2位の Akai_kobito の順位を見て通過条件を満たしているか確認するなどをしていた。そうこうしているうちにコンテスト終了。

 

 

D みたいな問題を素早く解くのは割と得意寄りであり、それにより G を通すまでに時間がかかった割に7完内では結構良い順位だったのは偉かったと思う。

 

https://icpc.jp/2025/sponsorship/awards-domestic/

ちなみに23位は企業賞の対象らしい。エンカレッジ・テクノロジ株式会社さんありがとうございます!

国内予選終了後

北大の他のチームと話したり使った部屋の片づけをしたりした後、希望者で焼肉屋で打ち上げに。

 

 

(他にも参加した人はいっぱいいたが、自分含めてツイートをしていない人が多い)

一部の人はそのまま二次会でボドゲをしていたらしい。自分は疲れて体力が残ってなかったため帰宅。

 

感想

普段の自分の性格には何かを頑張っている人を見ると「どうして見返りもなくそんなに頑張れるんだろう」と思ってしまうような、冷笑癖のような性格があるのだが、今年、 ICPC ラストイヤーで、もし Yokohama Regional に行けなかったらと想像するとそれが嫌で嫌で嫌で仕方がなく、なんとかしてもう一回横浜に行ってやる、そういう思いがあった。その割にはそこまで個人で過去問をやっていなかったという話がある。そして去年の .Shaco での反省と自分たちの学内での立ち位置・ICPC 参加チーム全体での立ち位置を考えた時に立ち回りを安定させることが何より重要で、逆にそれさえ実現できれば通過できると思っていたから、安定した立ち回りを意識して一問一問確実に通せるようにしよう、と何度も言ってきて本当に良かった。自分は割と問題を飛ばしたがる癖があって、模擬国内でも構文解析の E を飛ばしたがったり国内予選本番でも G を飛ばして H を解きたがったりしたが、チームメイトにそれを止めてもらえて本当にありがたかった。結果的に ADEG の実装を担当して、コンテスト後にも「ococo が偉かった」的なことを言われたが、D は自分一人だったらもっと時間がかかってたはずだし、E は一人だったら通しきれるか怪しかったし、 G は自分だけじゃ絶対に通せなかったので本当にチームメイトに感謝である。

そして、自分は今年が ICPC ラストイヤーのため、 ICPC 国内予選という問題傾向が(atcoder 等と比べて)独特でその上緊張感もめちゃくちゃあるコンテストに contestant として出ることはなく、もうやらなくていいという肩の荷が下りた気持ちと、もうできないという寂しさが同居した不思議な気持ちである。

こんなことを言ってちょっと感傷的になっているが、あくまでこれは予選の突破であってゴールではない。まだまだ一人の競技プログラミングプレイヤーとして未熟な部分は多いし、もっと力をつけてさらに強くなっていきたい。

そして最後に、ICPC を運営・開催してくださった皆さん、JAG の運営や模擬国内の運営・開催をしてくだっさ皆さん、国内予選を行うにあたって部屋やプリンター等の準備をしてくだった皆さん、コーチをやってくれた winter さん、チームメイトのはと君、kouty 君、その他何かしらの形で少しでも ICPC が良くなるよう、我々のチームが良くなるよう協力してくれた皆さん、本当にありがとうございます!!!

 

Ladies and Gentleman See you again in YOKOHAMA

 

 

OUPC2024 参加・作問記

OUPC2024 の参加・作問記です。面倒だったので数式を斜体にするとかそれ系のことはほとんどやってないです。Done is better than perfect ですね。

お前だれ?

おここと言います。 atcoder ID は ococonomy1、Twitter ID は ococonomy4 です。北大生の黄コーダーであり、北大セットであるところの day2 では作問に関わっていました。音ゲーやタイピングもしますが、最近はしてないです。

参加記本編(参加記本編?なんて書けばいいんだ?)

3/14

実家から大阪に向かう。飛行機で移動し、飛行機内では機内モードでライブラリを作っていた。具体的には自作の modint 。良い感じに operator/ を高速に計算できるようにしたいから分母が小さいときは逆元の値を埋め込みたいがそうすると 998 限定になるな……。 あるいは埋め込むなら constexpr にするか?とか考えていた。ちなみにこれを書いている時点でまだどういう実装にするか決まっていない。ライブラリの整備や盆栽は無限にできますね。個人的には有限時間で終わると分かっていることの方が好きなのですが……。さて、大阪は祖父母宅があり今回はそこに泊まるため宿泊費がタダになり、とてもありがたい。ちなみに day1 や day2 に何回か泊まり事情を聞かれたが、「祖父母の家に」と言うと堅く聞こえるし「おじいちゃんおばあちゃんちに」と言ってる自分は解釈違いだし……、と迷って「親戚の家に」と言った。でもあんまり祖父母のことを「親戚」って言いませんね。文章だと堅い書き方でも違和感がないから「祖父母宅に泊まった」と表現しても問題がなくなる。小食な方ではないが、夕飯をいっぱい出されて「もう食べられないよ~」になった。(次の日以降も朝食がいっぱい出て、一回も完食できなかった。)自分も年を取ったら若者に食事をいっぱい出すタイプの人間になりそうな気がする。

3/15(day1)

阪大セットに contestant として出た。チームメンバーは Twitter で事前に組むことを決めていたにょぐたさんとけんちょんさん。花粉症と木(グラフの方)の問題がつらいみたいな話の流れで SuginokiButtaosu というチーム名に。

事前にコンテスト開始直後のムーブをチームで話し合って、自分が速解きに一番自信がありそうだったので AB 両方引き受けることに。結果として A はオンサイト FA だったらしい。 char 型に入っているアルファベットは ^32  で大文字・小文字の変換をできることを知っていて良かった。

B 問題は変な添え字ミスで、 ±1 を間違えたとかじゃなくて operator[] に入っている変数が一個全然違った。運悪くサンプルをすり抜け、 WA を生やしてしまった。

その後、自分が AB を考えている間にけんちょんさんが見ていた C についての説明を受ける。「DP でいけそうだけど実装が地味にキツそう」みたいな話を聞きながら他の問題を眺めて、E のインタラクティブ問が面白そうと思い考える。色々やり方を考えたが、N >= T+1 とクエリの上限が 15 という制約が苦しく、この後他の問題をやった後も何回か考えたが最後まで解けなかった。ちょっと考えて「クエリを飛ばす回数はO(logN) くらいには削れそうで かつ雑に思いついた方法で 30 くらいはいけそうだけどそこから削る方法が思いつかない」となった時点で切っておくべきだったのかなあ。構築・インタラクティブは時間のかけ方が難しい。順位表情報を見るべきという話もあるが「自分だけ解けるタイプの問題じゃないか?」という可能性をどうしても捨てられない。

その後、再び C を考え、「というか dp[i] := i 文字目までの答えが普通に解けないか?」と思い、けんちょんさんに話す。前計算でランレングス圧縮の形を見て遷移先の候補を調べ、そこから遷移させる感じでやった。

C 問題を通したあたりでけんちょんさんが考察・実装をしていた M 問題について、かなり良さげだけど WA が出るらしく、いろんな hack ケースになりそうなテストケースを提案していた。

その後、にょぐたさんが実装していた O 問題について TLE が発生していて、明らかに時間計算量 O(N^2 logN) だったので定数倍がどこかマズいはずという話になり、実装を見ていた。自分はどういう改善ができるか本質的な提案ができなかったが、けんちょんさんの提案により定数長の配列の一部で vector の代わりに array を使ったらめちゃくちゃ速くなった。私も今度から定数倍バトルになったら積極的に array を使います。

その後、コンテスト終盤は D 問題をチーム全員で考えており、 z が全て 0 なら絶対値が大きい方から貪欲であり、逆にそれ以外の解法がなさそうだから、 z の情報を良い感じにノードに渡した評価関数を作って貪欲をしたい、という話になっていたのだがその良い感じの貪欲が最後まで出てこなかった。解説を見て最終的に知りたいのが F - S だから 「z を両方とも得ない」は「z/2 を両方が受け取る」と言い換えても問題ない、というアイデアを見てかしこ~となった。そんな感じでコンテストが終了し、会場でボドゲをやった後 551 に移動し懇親会。昔の有志コンでオンラインでチームを組んだことがある pitP さんやにckなめさんをはじめとした色々な人と話せて楽しかった。また、宝くじチャンスのために懇親会中に ABC397-A をスマホコーディングで通したりもした。(6分38秒 + 1ペナ)

3/16(day2)

この日は writer として参加(参加?出題?)writer/tester 陣は contestant の提出や順位表等を見ながら、 discord のチャットで会話していた。せっかくなので自分が原案出した問題の話もここで。

I Amidakuji Inversion

(リンク : https://mofecoder.com/contests/oupc2024day2/tasks/oupc2024day2_i )

「sort された順列を有限回隣接 swap しても転倒数の期待値は最大値の半分を超えることはなさそうだよなあ」と考えてたら思いついた問題。自分が原案を出した時に原案と一緒に出した解法は独立とみなしちゃいけないものを独立とみなしていて嘘だった。その後いっぱい解法の議論があり、途中から期待値に弱い自分はついていけなくなった。その後今の想定解法が出てきて、「確かに正しそ~」になった。でも多分解法を知らない状態で contestant としてチーム戦に出た問題であれが出て、チームメイトからあの解法を話されたら「本当か?」になると思う。確率・期待値あたりは何を独立とみなしてよくて何を独立とみなしちゃいけないかが難しい。自分にとってしっくり来る解釈を見つけたいですね。解法の議論にはほとんど貢献できなかったが、ゼロから問題を生み出す大変さというのもあるので原案を出したというだけでもこの問題に関して多少は貢献できたと思いたい。

K Count Ococo

(リンク : https://mofecoder.com/contests/oupc2024day2/tasks/oupc2024day2_k )

大分昔に「有名な競プロ er になったら高橋君みたいに問題文に出れるのかな~」みたいなことを考えていたことがあるのだが、有志コンなら今でも出れるじゃん!みたいなところから思いついた問題。実は ococo-like な文字列に関する問題を二問提案しており、最初出した時の名前は「Count Ococo 2」だった。もう片方は一緒に出した解法が嘘だったのでこっちのみが出ることに。(嘘解法を出してることが多すぎ!)結果的に今回のセットで一番 ABC っぽい問題になった。想定解法はσ1つだがσ2つでも通り得る制約で提案し、実際σ2つを通すかについては議論があり、自分からは「近い難易度帯の問題が少ないので今のままで良いと思います」的なことを言った。コンテストの前日に「明日はコンテスト会場で ococo-like って言葉がたくさん聞こえるのかな~。毎回自分が呼ばれたと思って反応しないように気を付けないとな~」とか思って調子に乗っていたが、一回も聞こえなかった。別に良いんだけどちょっと寂しいですね。(オンサイトに来る層のレベル的にほとんどのチームがあまり議論するまでもなく解けたというのもありそう)まあでも今回は問題のことをほとんどタイトルの略称で呼ばれていて、この問題の略称は「ococo」だったため北大作問陣で議論してる時に何回も一瞬呼ばれたかと思う現象が発生したためそれでお腹いっぱいではある。

L Range Xor X Count

(リンク : https://mofecoder.com/contests/oupc2024day2/tasks/oupc2024day2_l )

原案を出した時は X = 0 のみで、タイトルも「Range Xor Zero Count」 だった。4k,4k+1,4k+2,4k+3 の XOR が 0 になる、という事実から着想を得て思いついた問題で、実際に雑に解を書いてみたら 4k+2,4k+3,4k+4,4k+5  の XOR も 0 になることに気付いて、「これめっちゃ0作れるぞ!?」となって投げた。区間 XOR としてほしい値 X を 0 以外も追加するというのは tester のえこってさんの提案だったが、結果的に Full of 2x2 よりは手が出やすいけどそんな簡単じゃない、程よい難易度感の構築になったと思う。

(原案を出した問題の話はここまで)

コンテスト後は Catch Monster の元ネタであるところのおばけキャッチで遊んだ。自分は数回遊んだことがある程度で上手さとしても一般人に毛が生えた程度だが、何人かの北大 er が異常に強いのでそれを色んな人に見てもらえて良かった。あの場にいた人にしか共有できないですが、あれヤバくないですか?

その後、北大セットの作問陣である today さん、その友達のねむたいさんになんか流れで着いていくことになり、一緒に夕食を食べた。

3/17

先述の通り祖父母宅に泊まっており宿泊費がかからないのでこの日も大阪にいた。観光地に行こうかと思ったが意外と疲れも溜まっており、梅田周辺をブラブラ歩いているだけで割とすぐに帰ってしまった。何回か「あの人 OUPC にいた気がする」と思ったが、よくよく考えると OUPC に参加していた人の(おそらく)過半数が自分の見た目にそこまで気を使わないタイプの男子大学生で、そういう人は必然的に見た目が何パターンかに分けられるので、OUPC に参加してない、似たようなタイプの20代前半くらいの男性か~と思った。オタクは見た目に気を使え!(これは自虐です。)

3/18

実家に帰った。この文章は飛行機の中で機内モードのパソコンで書いているため、本当にこれを書いている時点に辿り着いた。この後恐らくフォーマットを整えたり、見出しを設定したり、書き忘れに気付いてそれを書き足したりすることだろう。まだ「(〇〇について書く)」みたいになってる部分もあるし。

 

終わりに

非常に楽しかった!!!!!!

(ツイートを貼る)

↑なんか粗く書いてた段階でこんなメモがあったんだけどどのツイート貼ろうと思ってたのか分からん。

人と話すのは好きで、特に競プロ er と話す場合、人と話す時に起こりがちな「話す話題がない」という問題について競プロの話をすることで解決できるのでとても良かった。あったことをいっぱい書いてたら分量が多くなって疲れてしまったけど、他にもいろんな人と色んなやり取りができてよかった。私と話したけど今回名前が出なかった皆さんには「自分との会話はつまらなかったってことなのかな……」って思わないでいただきたい。本当に、つまらない会話なんてなかったので!!!

あと今回作問作業に携わって、自分が作問作業に向いてないことをしっかりと実感できた。「今出ている解法より高速な解法があるかどうか分からない状態でそれを考える」や「ありそうな嘘解法・その嘘解法のいかにも駄目そうなケースだけ誤魔化した場合の解法を考える」などのことをしようと思っても、全く気が向かず他のコンテストやバチャに出てしまったり、Twitter や Slay the Spire を開いたりしてしまう。(ところでスレスパの A20H、心臓に辿り着くまでと心臓を倒すことの難易度差が大きすぎませんか)

多分自分の性格と能力を考えると「ボス問を1問生やして準備期間中はその問題に集中する」みたいな取り組み方が一番良いと思っているのだが、これには一個大きな問題があって、全くボス問が生える気がしない。どうやったらボス問が生えるんですか?祈り?

作問と自分の距離感が難しいねという話はまたこれからゆっくり考えていくとして、とにかく楽しい 2日間で非常に良かった!!!!会場と day1 の問題セットの提供・準備をしてくださった阪大の皆さん、北大セットを解いていただいた皆さん、day1 でチームメイトになった皆さん、コンテスト後や懇親会とかで喋った皆さん、自分以外の北大セットの writer/tester の皆さん、そして全ての OUPC に関わった皆さんに大感謝です!!!ありがとうございました!!!!

またどこかで会えたら会いましょう!!!!!!これを読んでる今回会えなかった皆さんもどこかで!!!!!

to be continued...

AtCoder 黄になりました!!

 

 

嬉しいね!!!

 

AtCoder で青になったのが 2023 年の 4 月 1 日に行われた ABC296 で、実はそこから1年以内に黄色になることを目標にしていたので、それが達成できなかったことだけ残念だったけど、それでも普通にめちゃくちゃ嬉しい。

 

一応 AtCoder Problems の色変時の状況を貼っておくか。とはいえ下埋めを全然してない以外は割と入黄達成者として普通くらいの感じだと思う。(正直他の人がどんなもんなのか全然把握してないんだよな。)

 

(画像貼るの飽きたしここまでで良いか。ここら辺まで見れば大体どういう感じか分かるでしょ。)


てかお前誰?

すいません。自己紹介が遅れました。おここと申します。(AtCoder: ococonomy1 Twitter: ococonomy4) 大学生です。えー、後はなんかあったかな。あ、さっき見てもらった通り、黄コーダーになりました。

 

あとは AtCoder 青になったときにこういう色変記事を書きました。この頃ははてなのアカウントを持ってなかった(これは嘘で、作ってはいたが動かす気が一切起きないくらい動かしていなかった。)状況なので note に書いてますね。今後は競プロのことはこのはてなに書いていくのでこの note は無理に追わなくて大丈夫です。

 

今回の色変記事の内容について

 

 

実は青コーダーの頃に考えていた色変記事の内容として「(元)寒色コーダーの目線でいろんな海外コンについて感想を述べます!」的なことをやろうと思ってたんですよね。私は比較的多くの海外コンに出てる方で、かつそれらの海外コンについて「このサイトはこういう特徴がある」みたいなのを寒色コーダーの目線で書いたものがないなと思っていたので、ちょっとは需要があるかもしれないし書こうかなと思っていたのですが、ちょっと書き始めてみて思いの外面倒だということに気付いちゃったので、諦めちゃいました。

 

でもこんなことを言っておいて一切触れないのも誠実でない(?)気がするので(日本の競プロコンテストをやっているサイトを含めて)雑にそれぞれのメリットを挙げておきます。

 

AtCoder - 問題文や解説が日本語だから読みやすい。ある程度競プロアカウントをフォローしておくとコンテスト後に流れてくる情報量が多い。

yukicoder - 問題文や解説が日本語だから読みやすい。問題傾向が広い。

AtCoder Problems(バチャ) - 問題文や解説が(略)。時間を測らずにやる下埋めや upsolve に比べて速解き力がつきやすい。

Codeforces - 「考え方の典型」みたいなものが身につく。 ARC に苦手意識がある人はとりあえず Div.2 を 30 回やりましょう。

CodeChef - 雑パターンマッチングでは解けないことが多いので考える癖がつく。思考停止でそれっぽいコードを書く癖が抜けやすい。

DMOJ - 時間の融通が利きやすい。頻度が少ないのでよく問題傾向が分かってない。

TLX(toki) - 順位システムが AtCoder に近くて分かりやすい。頻度が少ないので問題傾向がよく分かってない。

 

こんな感じですね。本当はもっとそれぞれのサイトごとにどういうコンテストがあってこういうメリットデメリットがあって……、みたいなことを書いたりそれぞれのサイトのリンクやスクショを貼ろうと思っていたのですが、面倒だったのでここら辺にしておきます。詳しく知りたい人はおここに聞いてください。(気軽に人に尋ねられない人のためにちゃんと説明した記事を書こうと思っていた気がするのだが……。)

 

ここからは、色変記事らしく精進の話とか感想とかの話をしていきたいと思います。

 

コンテストに沢山出る意義

 

先ほども言いましたが、私の青コーダー時代の精進の特徴として、コンテストにいっぱい出たというのがあります。今調べたところ、AtCoder の rated 出場が 165 回、Codeforces の rated 出場が 46 回、CodeChef の rated 出場が 13 回らしいです。(思ったより多くなかったな……。)あとは AtCoder Problems のバチャに 199 回出ていますね。(これはさすがに多い方だろ!)

 

で、コンテストやバチャに沢山出る意義として、速解き力・安定性がつくというのがあると思っています。下埋めとか upsolve とかやるとき、恐らく多くの人がそこまで時間を気にせずにやってると思うんですが、コンテストやバチャに出ると前半の自分にとってそこまで苦労せずに解ける問題も、速く、確実に、解けるように意識するんですよね。その積み重ねが他のコンテストに活きてきて、今まで 90% の確実性で解けた問題が 95% や 99% の確実性になったり、今まで 20 分で解けた問題が 15 分や 10 分になったりすると思います。(少なくとも私は、なりました。)

 

ここら辺の話は自分のレートより一色分くらい下の difficulty の問題のことを想定しているんですが、それらの問題を速く、確実に解けるようになると、当然下振れは上がりますし、実は上振れも上がるんですよね。

 

というのも、崖回だったら速解きでパフォーマンスは大きく伸びますし、さらに崖じゃなくても、今までなら厳しかった適性ちょい上くらいの問題にかけられる時間も増えるので、コンテスト中に多く解く力にも繋がるというのもあります。コンテスト終了 5 分後にやっと通せたということがあったとき、次はコンテスト中に通せるように無駄な考察を減らそうとか、スムーズに実装しようとか思うのが自然な人間の考え方ですし、実際私もコンテスト後はそっちに意識が向くんですが、手前の問題を素早く解いて 5 分を捻出する、というソリューションもあるというのは言っておきたいですね。

 

まあそんな訳で、コンテストとバチャにいっぱい出て、速解き力と安定性をつけるという精進が、お勧めです!

 

コンテスト振り返り

 

せっかくだし AtCoder で青になってから黄色になるまでの印象的なコンテストを振り返っていきたいですね。私は自分語りが好きなのでこういう話を無限にしたい。

2023年 4-6月

青になった直後。2023年4月1日に青になったので「青になってから X か月」みたいなのが計算しやすいことで知られている。実はこの青になった ABC296 が初めての ABC での黄パフォだったのだがこれ以降ちょくちょく ABC で黄パフォが出せていてすごい。あとやっぱり目を見張るのは ARC160 の灰パフォでしょうか。緑-水コーダーだった頃は ARC で水-青パフォをちょくちょく出していて ARC に得意意識があったがここで灰パフォを出して結構心が折れた。この頃から ARC にはしばらく苦手意識があった気がする。

 

あとちょくちょく unrated になっていますね。 DDoS 攻撃とかジャッジ詰まりとかあった頃ですね~。個人的にはここら辺の unrated 回でちょっとだけ助かっていたんだよな。これが全部 rated だったらこの頃のレートが -10 くらいになっていたはず。(ちゃんと計算したわけじゃないけど、そのくらいな気がする。)

 

2023年 7-9月

青と水を行ったり来たりしている。この頃 AtCoder の色の伸ばし方がマジで行方不明だった。あと ICPC の国内予選があったり JAG 夏合宿があったりで競プロモチベ自体は低くなかったのが救いか。 JAG 夏合宿(9月中旬)で同じ部屋になった黄コーダーの話を聞いたり、Day1 で青コーダー 3 人のチームでめちゃくちゃ好順位を取ったことで上振れ力に自信がついたりしたことで、安定性を上げたいしレートより低めの difficulty の問題をバチャで積極的にやろうみたいに考えるようになった気がする。

 

2023年 10-12月

ABC の 2400 パフォが 2 つも!!!!この頃から明確に ABC が楽しくなり始めた。ARC や AGC に関しては、 ABC の普通が ARC/AGC のちょい上振れくらいで、 ARC/AGC の下振れは ABC だと相当でないようなパフォーマンス、という感じだったから苦手意識はあった。あとこの時期はモチベが高くて海外コンを結構やっていた気がする。ただ海外コンの成果はこの時期はまだ表には出てないね~。あと 11月にあった ICPC の Asia Yokohama Regional の大会当日にそれまで結構繋いでいた AtCoder Problems の streak を切らしてしまい、それ以降 streak を繋ぐモチベが下がったが、競プロ全体のモチベに関してはそこまで下がらなかったな。そもそも streak を繋いでいた時期も灰 diff で繋いでいた日がちょくちょくあったし。

 

2024年 1-4月

 

色変直前のこの数か月が一番波乱万丈だった気がする。二週連続で出した 2400パフォ(ABC337,ABC338)、あと一回 2400 出せば入黄というところから4回連続で冷えて失った120ものレート、今まで苦手意識があった ARC/AGC での橙パフォ、そしてレートが1950 を超えておりいつ入黄してもおかしくない状態が3週続いての、初 ABC 全完で入黄。ABC での上振れが増えたのはバチャをいっぱいやったおかげだし、 ARC と AGC で橙パフォを出せたのはコドフォの Div.2 をいっぱいやったからだと思う。やっぱり自分がやってきたことが数字に反映されるのは嬉しいね。別に競プロの精進を苦しいと思ったことはないが、それでも何かが報われた気がする。

 

これから

 

 

今年の初めにこんなツイートをしたが、このジンクスというのは正確に言うと「具体的な目標を他の人に言ってしまうと達成できない」というもので、もう達成してしまった目標や、期限を過ぎた目標については無効だと思っている。で、誰にも見えないところに今年の目標を書いていたのだが、それがこんな感じである。

 

達成していない目標については黒塗りになっている

自分でもびっくりなのだが4月時点で 4分の3 達成できている。(AtCoder 黄に関しては期限が守れなかったけど代わりに CF 薄橙タッチが 3 月で AtC 黄が 6月に間に合ったのでギリセーフってことで。(そんな理屈が通用したら、ダメだろ。))なので今後は、達成していないから黒塗りにしたもう一個の目標を達成できるように頑張っていきます。あともう一個「今年中に達成したいと思っていること」があったのだがここに書いてなくてビックリした。まあそれも公開できるように頑張ります。

 

ここまで読んでくれてありがとう!

 

おここより

ICPC2023 Asia Yokohama Regional 参加記

参加記ってどんな温度感で書けばいいんだ

 

自己紹介

いるか?一応書いとくか

AtCoder青 北大B3 早生まれではない

 

チーム紹介

チーム名:elephant_spaghetti

・yasagureprogさん

考察力が強い印象。AtCoderのレートは青だがAGCで一回橙パフォ取ってて「すげえ……!」と思った。ICPCに出るのは今回が初めて。

・usatyoさん

数学力(特に幾何)が強い印象。今はAtCoder青だがAtCoder水になってからABCに一回もratedで出ておらず、ARCunrated勢の逆をやっている。ICPCに出るのは今回が初めて。

・ococonomy1 

チームの中では比較的典型力がある?うちのチームで唯一のC++使いなのでTLが厳しそうだと自動的にこいつが実装することになる。ICPCのRegionalに出るのは今回が初めて。(国内予選は2022年も出た。)

 

国内予選の参加記はこちら

 

 

 

 

「こちら」をクリックすれば飛ぶと思った?書いてないので飛ぶ先がないよ。ごめんね。

 

本編(本編?)(何があったかを具体的に書くパート)

Day0

飛行機で横浜に向かう。この日は金曜日で2限があり、それに出席できるような時間の飛行機をとったのだがやる気が出ずにサボった。19時頃に横浜のとあるビジネスホテルに着く。北大のOBの人と中華街の店でご飯を食べることになっていたのでそこに向かう。色んな話が聞けて楽しかった。ちなみにこの日乗った飛行機にyasagureさんも乗ってたらしい。(別々に飛行機をとって、後で同じ飛行機に乗ってたらしいことが判明した。)

 

Day1

リハーサルのある日。朝ごはんを食べ終わった直後くらいにチームメンバーに「一緒にご飯食べませんか?」と言われた。残念ながら胃が1個しかないので断ることに。横浜産貿ホールに早めに着いて周辺をちょっと散歩してた。チームのメンバーとは現地集合で自分だけ早く着いてしまったため暇そうにしてた。

その後説明やリハーサル等があり、リハーサルが始まる前に「せっかくなのでFirst AC狙います?」と言ったら初めてだし慎重にいった方が……みたいな雰囲気になったので狙わないことになった。私はリハーサルでBを書いたが全然実装ができなくて無限にACできないかと思った。(最終的には有限にすることができた。)

リハーサルが終わった後は何があったっけ?チーム紹介か。スライド作ってる時温度感分かんね~って感じだったので結構ラフな感じなんだな~と思った。ちなみに我々の座ってる席はF-3だったのだが柱で全然壇上に立ってる人の顔が見れず、「あっここTwitterでFFの人がいるチームだ!」と思って顔を見ようとするもまるで見えない、を何回かやった。横浜産貿ホールさん、思いきって来年までに柱を撤去してみませんか?解散になった後はelephant_spaghettiのメンバーで中華街を食べ歩いた。途中ICPCのシャツ来た人やICPCの名札を付けてる人を見かけたりした。話しかけようかなとも一瞬思ったが、勇気も話題もないし向こうも複数人で集まってる感じだったので特に話しかけず。

 

Day2

本番のある日。朝にコンビニでライブラリを印刷した。500円かかった。前日にusatyoさんにpdf渡して「この番号コンビニのプリンターで入力すれば印刷できます」みたいな状態にしてもらったおかげで比較的スムーズにできたがそこに渡してなかったやつで印刷しておきたいのがあり、それを印刷しようとしたらスマホのバージョンが古いと言われたため、慌てて別のコンビニに。(ちなみに私のスマホは5年半くらい前に買ったやつを未だに使っており、slackやグルミクなどのアプリがバージョンのせいで入らないことで知られている。)二軒目に入ったコンビニで印刷できたので良かった。

本番

開始と同時にusatyoさんがログインを始め私とyasagureさんで問題を読む。Aは基本私で文字列操作が要求された場合(Pythonで書いた方が楽な可能性があるため)yasagureさんが担当することになっておりサンプル読んだ感じ文字列っぽいのでyasagureさんに投げてBを進める。yasagureさんに読んでもらったところ「こういう問題概要だけどちょっとすぐに実装方針が浮かばない」みたいに言われ、概要を聞いて私が書けそうだったので私が書くことに。その間にusatyoさんとyasagureさんにB問題をやってもらう。ほどなくして、Aを無事にAC(11分)

この辺りで順位表を見るとAが結構解かれてるFも解かれている。Bは2人の感じ聞いてると結構大変そうで「今回難易度順なのAだけかも?」みたいなことを言ってFに取り掛かる。チームメンバー(どっちか忘れた)に「こんな強いとこが通してるの見てもあてにならないんじゃ」みたいなことを言われたが、順番が難易度順じゃないコンテストに出た経験値は自分が一番多い自信があり、そういうコンテストで強いところが早めに通した問題が時間経ってもなかなか解かれないことは稀だという認識があっため「少なくとも重実装なことはないですしいったん考えてみるだけでも価値はあります」みたいなことを言ってFに。普通にむずくね……?と思ったがusatyoさんが解いてくれた。(35分)

usatyoさんがFの実装に取り掛かってる間に全部の問題に少しずつ目を通し、Bは分からんが順位表見る感じ解けそう、Cは愚直書ければワンチャンエスパーいけるかも?Dは正規表現での説明書いてあって構文解析チックなので実装しんどそう、Eは自分の得意傾向っぽくて時間かければ解けそう、と判断。(Eを読んだ辺りでusatyoさんがFを通した)G以降はざっとしか読んでないが問題傾向的にKはusatyoさんが得意そう?という話をしながらyasagureさんとBを考えることに。2人で考えてたらyasagureさんが解けたっぽいのでそのままyasagureさんが実装し、その時間で私はEを考えることに。ここら辺で空腹を感じてきたためEを考えながらラムネを5粒/1口のペースでボリボリ噛んだりウィダーinゼリー(今はウィダーinゼリーではない)を5秒で飲んだりしていた。傍から見たら面白い食事をできていたと思うがおそらく誰も見ていない。その後、yasagureさんがBを提出。1回WAが出たがコードを見ながら私が「この変数ってどういう意味ですか」とか聞いていたらバグを見つけたらしくそこを直してAC(57分)

この後くらいから出来事の時系列が怪しいんだよな。

・usatyoさんが一旦諦めたKを再度考えてみたら良さそうな方針が思い浮かんだらしいので実装に取り掛かる

・yasagureさんがDの考察をできたが再帰とロリハがいりそうなので私がC++のロリハを書くことになるが、ライブラリを探してもロリハが見つからない(ICPC用のライブラリ整理でロリハは……、ハッシュの衝突とか恐れるような問題出ないだろ!と思ったことを後に思い出す)

・私がE問題の解法について、aとcの向きで不確定なのは高々11通りしかないため2^11=2048通りの全探索ができるのでは?という考察をする。(向きを全部確定できればトポロジカルソートと木DPで大まかな方法が浮かんでいた。)

・私がrestroomに行く。gentleman? lady? と聞かれて"gentleman"と答えながら「聞かれるならともかく自分について答える時にgentlemanは変じゃないか……?」と思う

などのことがあったが、あの時から24時間以上経ってる執筆中の私にはとても整理できない。

その後、usatyoさんがK問題の考察を終え実装をするもWAが出て、いくつか怪しいところを直しても通らなかったのでソースコードを印刷してもらいその間に私がロリハをライブラリなしで書く。(今振り返ると、ライブラリを持ってく時に「これいらんだろ!」で実際に必要になるライブラリを印刷しないでしまうというのが今回の一番のやらかしだったと思う。)バグらせつつもなんとか"abc"の[0,1]文字目と"cab"の[1,2]文字目のハッシュ値が同じになることを確認しロリハができ、yasagureさんの考察を聞きながら実装ラジコンになりDを書く。これをやりながら何回かusatyoさんがKのWAの原因っぽいところを見つけて直して提出してみる、というのをやっていたのだが、何回目かの提出でようやくAC(216分) 整数で出力すべきところが一部整数になってなかったらしい。

yasagureさんの考察を聞きながらDを実装し、しばらくかけて実装を終わらせる。最初TLEが出たが再帰をメモ化することでTLEが解消しWAになった。サンプルは合ってたしいくつか怪しいケースを見ても良さそうな出力になるのでどこでWAになってるか分からず、ハッシュの衝突では?という話になりMODを998244353から別の素数に変えてみるがWAが取れず。MOD2通り試すロリハを作るべきでは?みたいな話になり書いてみるも、どこかで実装ミスをやらかしていたらしくMOD10^9+7を追加して2通りのMODで見るバージョンで一致判定が動かなかった。しばらく(1時間くらい?)悩んでる時にusatyoさんが改めて問題見て「これ1桁までじゃないですか?」と気づく。なんとaaaaaaaaaaaaaaaaaaaaは20(a)ではなく4(5(a))とするべきらしい。同じ文字列を9個までしか見ないようにしたところAC(285分) 今思い返せば最初ロリハじゃなくstd::string::substrで一致判定してTLEになったらロリハ書く、みたいにやればよかったなあ。

私がロリハの実装で苦しんでいるをしている時にyasagureさんとusatyoさんがGを考えて結構進んでいたらしく、書きますか?といったところまだ考察の細かいところが詰めれてなくて実装まで合わせて15分じゃ到底無理とのことらしく、手持ち無沙汰だったので実装が間に合わないと思いながらEの2048通り全探索を書く。このEは全然想定解法じゃなかったし結局これで通せるかは分からない(仮に通るとしてもめちゃくちゃ実装が重くなる)が、yasagureさんとusatyoさんが考えてたGは解説聞いたところかなり良いところまでいってたらしい。

コンテスト後

順位発表。elephant_spaghettiは5完(ABDFK),41位だった。その後懇親会?があり、JAG夏合宿で話したまーたさんやだれさんなどと話したり、TwitterではFFだったが対面での面識はなかったlogKさんやShirotumeさんなどと話した。HUPCの時の名札を持っていったのだがこの時Twitterのアイコンがあったおかげで向こうから気づいてもらうこともあり持って行って良かった~と思った。chokudaiさんやけんちょんのような有名人とも話すことができ、Youtubeとかで見る時と同じ見た目で同じ声だ!と思った。(それはそう。)JAG夏合宿で知り合った人で喋れなかった人もいるのでそういう人とも話したかったなとは思いはあるが、色んな人と話せてよかった。懇親会が終わるくらいのタイミングで飛行機の時間と今の時間を見比べて「ヤバい!!!」となり爆速で会場を出ることに。途中自分以外に人がいないエスカレーターでキャリーバッグを落としてしまい爆速で滑っていったが、人がいないエスカレーターで本当に良かった。本当に。あれで他の人を巻き込んでいたらと思うとぞっとするね。飛行機の時間がヤバい!!!と叫びながら(もちろん、実際に声を出してはいない)移動することで横浜駅で爆速での乗り換えに成功。乗り換え案内より一本早い電車に乗って羽田に着くことができた。そのまま一本早い飛行機に乗り一本早い電車に乗り一本早い人生を……、というわけにはいかず羽田空港で以外と暇を持て余したがまあ余裕があって良かったということで。都道府県境の長い飛行機から降りるとそこは雪国だった。横浜でもday2とかは結構寒くて「札幌か?」とか言ってたんだけど札幌では雪が積もっていた。この日はコドフォのdiv2が23:35からあり出ようかなと思っていたが帰宅が間に合わなかった。

day3

またいつも通りの日常が始まる。

 

感想

楽しかった!!!!2022年のICPCは国内予選に出て全然惜しくないラインで落ちたのだが、年末にYokohama Regionalに出てる人達のツイート見てて楽しそうだな~と思ったので今年出れて嬉しかった。来年も出たいね。来年の今頃はどれくらい強くなって誰とチームを組んでいるか今はまだ分からないけど、今より成長してると良いな。あと今年は「正直playoff進出はまあ厳しいだろうな~」と思っての参加だったけど、ワンチャンの上振れ狙いとかでもplayoff進出があり得そうだったらまたモチベーションも変わりそうなのでそういうラインに立ててると良いね。(ところでYokohama Regionalで何位くらい取れればplayoff進出が現実的なんですか?)

反省としてはチームとしての立ち回りをもうちょっと決めても良かったような気がする。elephant_spagetthiは使ってる言語がバラバラなのと、考察力が強い人が多い反面実装力が強い人がいないので各自で考察して思いついた人が書く、みたいなパターンでやっていて、国内予選はそれでうまくいったけど今回はそれが悪い方に作用した感があった気がする。あんまり立ち回り決めすぎても臨機応変に動けなさそうみたいなイメージがあるが、せっかく時間はいっぱいあったしそういうのを試しても良かったかもな~、という気になってきた。というか個人でコンテスト出る時も立ち回りで失敗したな……みたいになることあるしそこら辺の力もあるに越したことはないし考えていきたいよね。

感想を前向きな感想→反省の順でやっちゃったから暗い感じで終わる雰囲気になっちゃった!!!!!でも何より楽しかったです!!!さっきも言ったけど来年も是非!!!!!強くなるぞ!!!!!!