ICPC2025 Asia Yokohama Regional参加記
12/6~7のYokohama RegionalにチームtriCで参加し34位になりました。選手で参加できる最後の年で、なんとか地区予選まで進め、順位も過去最高の順位がとれて良かったです。個人的にも4年連続で地区予選に参加できて嬉しかったです。

チームメンバー
去年と同じ3人で参加しました。3人とも去年よりレートが下がってしまっていて、苦しい1年でした。私はちゃっかりICPCの1週間前のABCでhighestを更新したものの、黄色にはなれませんでした。

国内予選
国内予選は5完87位で参加した4年間で一番低い順位で終わってしまいました。
今年は3人のキーボード配列を揃えるために、HHKBのUS配列のキーキャップを買って英語配列に慣れたり、3人の予定が合わないので夜9時からオンラインで週2回ほど練習したりしました。

国内予選当日はE問題まで解くことができ目標としていた5完には届いたものの、順位が伸びず、この時点では選抜順50位*1までに入れなかったため、予選敗退となってしまいました。十分な実力を発揮できなかった感覚はあったのですが、それ以上に他のチームのレベルが年々上がっていることに驚き、5完すれば国内予選は突破できるだろうと思っていた見通しが甘かったと感じました。
また、今年引退したらJAG(ICPC OB・OGの会)に入会して地区予選のお手伝いに行こうと思っていたのですが、入会のメールを送ることなく10月まで過ごしていました。

追加選抜から地区予選まで
ICPCのことをすっかり忘れて過ごしていたところ、10月になって追加選抜で地区予選に選抜された旨のメールが届きました。3年前も追加選抜枠での参加だったのですが、その時よりも補欠順位が低く諦めていたので驚きでした。
参加が確定した段階でホテルを取り、チームの練習日程を決め、11月に入ってからは毎週チームで海外のRegionalを解くなどして練習をしました。
今年は研究室から性能の良いPCを借りていることもあり、VirtualBoxを使ってTrial Image*2を起動し、更にキーボードも本番と同様のものを購入し練習しました。
他のチームもICPC用に購入しているのかAmazonでキーボードを買うことができず、Lenovoのショップから購入しました。

地区予選(Regional)
1日目
例年通り13時集合で、余裕を持って12時半頃に関内駅に着きました。4年目になると地図なんて見なくても会場にたどり着けてーと思っていたら、知らない改札から出てしまい、知らない建物しかなくて困ったので、近くにあった地図で現在地を確認し無事にたどり着きました。街中に地図とかランドマークへの道標があるのは親切ですね。
チームで合流しResistrationを済ませ席に行き、机に置かれているものを確認しました。
毎年チーム紹介の冊子があり、例年アスキーアートを作るチームが多いのですが、今年は行間が広く、絵が少し見づらくなってしまったのが残念でした。triCでは毎年ロゴを使いまわし再活用しているのですが、今年は縦に長い感じになってしまいました。一方で去年は"が""になって表示されてしまい、おかしな行があったのですがそれは改善されていました。
また、全角文字を入れたら文字化けしてしまったので気をつけたほうがいいと思います。


また、ICPCでは毎年会場で着るTシャツがもらえるのですが、今年のTシャツはコンテスト後も使いやすそうな色でいいなと思いました。去年から綿だけでなくポリエステルが入ったことで着心地が良くなり気に入っています。もらった競プロTシャツは全て父の部屋着になっているので、コンテスト後に私が着ることはないのですが...


14時になるとOpening ceremonyがあり、その後すぐリハーサルが始まりました。
リハーサルではコンパイルなどの環境周りを確認しました。キーボードもソフトウェア周りも練習でほとんど同じものを使っていたのでそんなにやることがなかったです。
ICPCではデバッグなどで利用できるようにファイルを印刷する機能が備わっています。印刷のコマンドを送信してしばらくすると印刷物がスタッフによって届けられるのですが、複数回送信するも印刷物が届かないので、聞いたらなにかバグっていたようでした。ちゃんと確認して良かったと思いました。
リハーサル後はHuaweiとかJetBrainとかのお話を聞きました。英語なので難しかったです。JetBrainのお話の途中で生成AIを用いていろんなことできるというのを見てへーと思っていたら、それが1年間使える権利をもらいました(後述)。
1日目の最後は各チーム30秒のスピーチでした。例年通りスムーズに進み予定より30分ほど早く帰れました。
終わった後は宿に行き、かつ屋でオクラ牛丼を食べて9時半に寝ました。
2日目
早く寝たかいがあり6時半に起き、コンビニでご飯を買って食べ、会場に向かいました。9時までにチームメンバーが揃わないと失格になるのですが、8時40分頃には3人揃って良かったです。
Registrationを済ませると、今年は荷物を先に荷物置き場に置いて中に入らないと行けないので少し面倒でした。例年同様に全チームが集まると数分後にすぐコンテストが開始されました。
コンテスト中
今年は簡単枠がABとは限らないため、ライブラリ写経と前後からの読み始めに分かれて初動は動きました。数分するとDが解かれ始めたので見に行って書いたらペナが出ます。わけがわからないので軽くテストを書くと見落としがあったので直したら通りました。
その後解かれているEを眺めて、有理数で求めるのが特徴的だなと思っているとcijb_7724くんから、各辺の長さを何等分するかだけ調べたら良さそうというのを聞き、いけそうだったので書いたら通りました。
Hについても普通に貪欲に消せばいけそうというのをHaruiくんから聞いて悪そうなケースを言ったら大丈夫そうだったので丁寧に書いたらこれも一発で通りました。
その後は一番解かれているJが詰まらず、Cで遅延セグ木を使った解法を思いつき写経してもらった後実装するも、細かい部分でまずいことに気づき残りが1時間ちょっとになってしまいました。
ACIJあたりを考えていて、Aをもう一度考えた時に、丁寧に貪欲でマッチングさせたら大丈夫そうだなというのが見えて、他にできそうな問題もないのでやるだけ得だと思い書いたら一発で通り拍子抜けな感じでした。
残りは30分ほどだったので自分はCに粘着し、Iの考察を2人に簡単に話して任せていたもののその後は通せず終わってしまいました。
コンテスト後
コンテスト後は上の階に移動し、Closing ceremonyに参加しました。座席はたまたま一番うしろでした。
順位表の開示を見つつ、半分より上がいいなというのと飛び賞に当たらないかなと思っていました。
結果は34位でした。全部で63チームだったので微妙に半分より下で、33位のチームは飛び賞がもらえていたためちょっと悔しかったです。しかも33位と34位でペナルティが一緒で、秒単位での差だったのでなおのこと残念でした。

コンテスト後は懇親会に参加し、いくつかスポンサーブースを回りました。JetBrainのブースではルーレットをやっていて回したらAIのツール(?)が1年間使えるライセンスが当たりました。後日送られてくるそうなので、使ってなにかしたいなと思います。
その後は、フォルシアのスポンサーブースの問題をずっと考えていました。A問題は場合分けをして解けたのですが、Bの数え上げはうまい方法がわからず、最低限必要な条件だけあたりをつけて後は人力で探していました(結局何個か見つからなかった)。
また、キーボードを来年から新しくするのか、懇親会が終わるタイミングで、コンテストで使われたキーボードが積み上げられはじめました。自由に持っていっていいというので、古い型のを見つけ出してもらって帰りました。

例年懇親会は人が多いのにあてられてすぐに帰ってしまうのですが、今年はいくつかスポンサーブースを回り、その後は問題を考えてただけとはいえ、最後までいた結果、キーボードがもらえてちょっと得した気分になりました。
終わりに
競プロを4年近く続けてきた理由の一つがICPCだったので、今後はJAGスタッフでなにかお手伝いできたらなと思っています。
ICPC2024 Asia Yokohama Regional参加記
今年もICPC Yokohama RegionalにチームtriCで参加し、5完41位でした。

チームメンバー
igeee (青): 考察、面倒な実装。英語配列のキーボードに慣れていないのでライブラリの写経はHaruiにまかせている。幾何、構文解析も担当するが、出ないことを祈っていた。
Harui (水): ライブラリ写経、英語読み、数学系の問題の考察。ICPCのために地区予選で使われるキーボードを購入し使っていたが、本番のキーボードが違うキーボードだった(2種類のどちらかで、違う方だったらしい)。
rogo (水): 前半の考察実。図がきれい、説明がうまいので、考察の時に確認したりした。積分が得意らしい?
国内予選

国内予選は84位(下から2番目)での予選突破だった。今年から国内予選の簡単枠が1問増えた。この変更は複数人で実装を回せるチームが有利になる変更で、当時AtCoder青緑緑で実装の大半を自分が行う予定だったtriCには少し不利な変更だった。また、ライブラリのコピペ、コード補完の使用が許可された変更もあったが、これは面倒が減るのでありがたい変更だった。2つの変更の意図としては、ICPCで競プロを始めるような人が参加しやすくなるようにということだと思うので、良い変更だなと個人的には思った。問題数が増えたことにより、例年と照らし合わせて、チームの狙いは5完して確実に予選突破or万一のために早解きでの突破だった。
国内予選は自分が1週間前にコロナになり*1、本番はギリギリ参加できる状態だったもののコンディション的には最悪だった。問題は思ったよりABが簡単だったので、Bまでの実装をHarui,rogoにまかせて、自分でCDを通し、残り2時間弱でEかFを通せれば確実に予選突破だろうと思っていたが、Eの構築が思いつかず、Fの重実装が合わず、結局前半の早解きでの予選突破となった。ちなみにAで提出ミスが有り1200秒のペナがあってこの順位だったので、早解きについては練習の成果が出てうまく行ったように思う。
国内予選の内容と関係はないが、今年から自分がtriC(サークルのほう)を実質的に取り仕切る事になり、全体への諸連絡とかICPCの監督員のお願いとかを行った。今年は、都立大から(≒triCから)は過去最多タイの3チームが参加し、とても嬉しいのだが、連絡事項が増えたりしたので大変だった。また、会場も例年、都立大横山研究室を使用しているのだが、せいぜい3チームしか入らない上に、triCを取り仕切る人が横山研究室の所属でないと使えないので、運営の持続可能性については考えなくてはいけないなと感じた。自由に使える印刷機、ネットワークが完備されてて、そこそこ広さがある環境というのはかなり限られるので難しい。また、初参加のチームなども入れて勉強会なども行いたかったが手が回らなかったのでそれも反省である。
地区予選まで
国内予選突破が決まってすぐに宿を取った。去年は近くのスタジアムでイベントがあったらしくかなり埋まっていたが、今年はそこまででもなかったものの年々高くなっているのは少し勘弁してほしい。
去年と同様にJAGの夏合宿に参加しようと思っていたのだが、論文の締切と重なってしまい断念した。論文を書いたことがなかったので、締め切り1週間前だけど行けるのでは?と思っていたが、普通に週7で研究室に行き、夏合宿の期間は夜9時くらいまで研究室にいたので、ただの希望的観測だった。
その後もなんだかんだ忙しかったりして、12月に入ってからICPCの練習に本格的に取り組んだ。個人ではRegionalの問題を少しずつ埋めて、チームでは3回JAGRegionalの問題を解いた。また、例年はVSCodium(?)をRegionalでは使っていたが*2、今年はステップ実行とかができるCLionを使うことにし、その練習もした。
地区予選
triC は明日 09:30~14:30 に行われる ICPC アジア地区横浜大会に出場します。応援よろしくお願いします!
— triC / TMU 競技プログラミングサークル (@triC_PR) December 21, 2024
🔗 Web 順位表: https://t.co/RexqbKxBcz
📷 中継: https://t.co/JcxOjGnagT pic.twitter.com/GkI4WqowlZ
1日目
1日目は13時前には3人集まり、1番乗りで会場に入った。コーチが来ないというのも連絡しないといけなかったようで、運営の人を少し困らせてしまい申し訳なかった。席は前の方だったので指示がよく聞こえて良かった。
リハーサルではCLion周りの確認をしつつ、タイピング練習に全問通した。インタラクティブのツールの使い方を理解するまでに時間がかかった。キーボードが思ったより打ちやすいなという印象だった。
その後チームイントロダクションとかを済ませ、17時前に解散し宿に向かった。宿は安心の東横INNにした。夜ご飯は近くのすき家で、かつおぶしオクラ牛丼を食べた。ここ最近で食べたものの中で一番美味しかったのでまた食べに行きたい。

夜はARCの考察を数問やって、周回ゲー*3で心を整え22時半には寝た。去年はABCにちょっと出て寝るのが遅くなったのでABCは出なかった。ユニットバスの使い方が未だによく分かってなく、今回は先にお湯を張って温まる作戦を取ったが、風呂に入ろうとしたらめちゃくちゃ熱くて水で冷ます羽目になったので、温度を指定できない(連続的に変化する&温度の目安がない)場合は、風呂に入りながら調整するのが良いという知見を得た。夜はまあ寝れたので良かった。
2日目
朝は6時半前に起きて、東横INNの朝食を食べた。ぼちぼち並んだものの健康に良さそうなものを食べれて良かった。8時40分ごろに会場に入り、定刻の9時10分になるといつものかっこいいビデオ*4が流れおおーと思っていたら、「The Contest will start in 3 minutes」とアナウンスがあり、9時15分にいきなりコンテストが始まってびっくりした。
コンテストが始まると手筈通りにHaruiがシステムログイン、CLionのアクティベート、テンプレート写経を行い、igeee,rogoの2人でAを読んだ。Aは計算量的にも雑にやって大丈夫そうだったので、軽く方針をすり合わせてrogoに任せた(0:22)。その後Bを読み、TechFulの駅伝でやられたようなbitの再帰だったのでAが通った後書いて通した(0:36)。
簡単枠2問が通ると、問題を読んでいた2人から、EがGrid上の再帰で計算するだけだという話を聞くも、途中でオーバーフローがやばいというので悩んでいたが、どうやら計算途中でもオーバーフローがないことが問題文で保証されているとのことで、それを信じて(問題は全然読んでない)書くと通った(1:10)。
この時点でK、I、Cあたりがぽつぽつ解かれていて眺めていると、Kができそうだったので考え始める。Haruiの考察を聞いてまあDPかと思いつつ考えると、1つを選んだ時の相方の必要条件は、選んだやつと11...11のxorが立っていることで、その上位集合でbitが一番立っているやつが答えの候補になることがわかる。後は各々の相方で最適なものがわかっていれば良く、これはbit列のDAGを考えると111...11から000..00の順にbitDPをすればいいのでこれを書いて出すとWAが出る。トイレに行って戻ってくると、{YY,NN}みたいなケースでYYを2回選ぶようになっていることに気づきこれを直してACした(2:29)。解説でも言っていたがこのコーナーケースで詰まったチームが多かったらしい。
この時点で順位表を見ると25位とかで大分いいなーと思いつつ、あまりにもCが解かれているので考えることにした。Cは難読らしくKの実装中にあれこれ言っているのが聞こえていたが、すでに概要を把握していてくれたのでそれを聞き、どうせギャグだろうと思い、主客転倒して各頂点を追加した時の増えるコストの順にPrim法の要領で全域木を作るとサンプルは通るもWAが出て困る(3:10くらい)。原因がわからないので面倒だったもののランダムテストを書き、普通に最適なものを選べないことに気づく(4:00くらい)。こういう時の考察テクとして、答えが満たしている条件を考えるということをし、頂点1からダイクストラをしたものが答えになっていそうとなり、サンプル2をrogoに確認してもらいながら書くと通る(4:24)。
順位は大分下がっているものの、5完できたので満足しながら一応Iを見ていると、1e5の配列に、今見ている区間内に現れる数の約数になっている回数を持ったせるとMoができそうと気づく。この時点で残り17分で絶望しながら頑張って書くとギリギリ書き終わるもサンプルが合わず、結局提出できず終わってしまった。解説ではセグ木の二分探索といっていたが、定数倍を頑張るとMoでも通ったらしいので悔しかった。
コンテストの後は解説とYesNoを聞いて、少し企業ブースを見てHuaweiの良さげな袋をもらって帰った。
今年は謎のミスド(美味しかったけど食べづらい)が配られることがなく、また口の中の水分が持ってかれるメロンパンではなく、チュロスパン(?)*5が配られるなど、去年のフィードバックで書いたことが活かされたのかなと思った。
ICPC Asia Yokohama Regional Contest 2024でチームtriCは41位になりました。
— triC / TMU 競技プログラミングサークル (@triC_PR) December 22, 2024
応援ありがとうございました! pic.twitter.com/SDfD4VzMcg
総括
今年の目標は4完、できるだけ多く解くというものだったが、結果5完できたことは素直に嬉しかった。また例年より戦えている感覚があり*6、楽しめたのも良かった。来年は最後なのでなんとかplayoff目指して頑張ります!*7
ICPC2023アジア地区予選参加記
11月25,26日でICPC2023アジア地区予選にチームtriC_Hinoで参加しました。

コンテスト結果

地区予選の結果は2完56位と残念な結果でした😥。チーム的には3完以上を目標にしていて練習でも比較的安定して3完できていたので2問しかできなかったのは残念でした。
チームメンバー
・Kyaさん : M1、青。最近はあんまりコンテストに出てないみたいだがなぜか強い。
・nattonatoさん : B4、水。卒論が忙しそう... 考察のピンポイントをよく当ててくる印象。
・私(igeee):B3、青。地区予選の1週間前に青になった。
コンテスト前まで
国内予選が終わり、地区予選参加が決まってから、JAGの夏合宿に参加したり、直前2ヶ月は毎週集まって過去問をやったりUniversalCupに参加したりしました。去年は追加招待(繰り上げ)で準備する時間があまりなかったのですが、今年はそれなりに準備に時間を使うことができました。
JAGの夏合宿に参加した話↓
1日目
1日目は13時すぎに集合して会場に入りました。乗り換えが面倒だったので桜木町駅から会場まで1キロちょい歩いたのですが、自信持って進んだ方向が会場と反対だったりしてちょっと遅刻しました。会場に入ると去年は1日目から机にお菓子がいっぱいあったのですが、今年はなかったのでちょっと寂しく思いました。
リハーサルは去年はインタラクティブの練習でかなり時間をつかったものの今年はそんなにかからなかったのでkyaさんにVsCodeの設定の確認などをしてもらいました。
チーム紹介も何も考えてなかったんですが、kyaさんがうまくまとめてくれたのでとても助かりました。
1日目の日程終了後は宿に行って荷物をおいた後ご飯を食べに行きました。去年の反省から今年は安定をとって吉野家に行ったらもぬけの殻だった(潰れたらしい)ので仕方なく近くの日高屋に行きました。帰りに記念に小籠包を買って食べました。
夜はABCにアンレで参加しつつ風呂に入って23時過ぎには寝ました。ただ枕が合わなかったり夜中に気持ち悪くなったりして何度も起きて大変でした。
2日目
7時過ぎに起きました。眠りが浅かったのもあってすんなり起きれました。朝は昨日の夜買っておいたサトウのごはんとレンジでチンの肉じゃがを食べて会場に行きました。
会場についてちょっと準備したらすぐコンテストが始まったので予定通りkyaさんにPCのセットアップをやってもらい、nattonatoさんとAを読みました。AはDPみたいなのをやれば通りそうだったのでそのままパソコンの前に座っていたkyaさんに実装してもらいました。
その後私がBを誤読し実装を始めて引き返したりしていたらkyaさんがFを通してくれました。
Fが通った後、kyaさんがBを遅延セグ木でごり押す方針を示してくれて時間はかかるものの、どう見てもできるのでライブラリの写経から頑張ってやってもらったもののライブラリがバグってたのか謎のバグが取れず。結局ACに至らず2完で終了となりました。
残り1時間くらいでBにnattonatoさんが2*Cまでの要素を見れば良さそうという正解の方針を示してくれ、私が軽く実装するもACにならず解法の確信的に遅延セグ木のほうが確実だと判断してそこでその方針を見切ってしまったのが悔やまれる結果となりました。
コンテスト後はYesNoでSpeed Starが全完していてすげーとなったりして大会の日程が全て終わりました。
終わった後ビュッフェパーティーがあったのですが、配られたお菓子をいっぱい食べたり、ドーナツを3つ食べたりしてお腹がいっぱいだったのと人が多いのが苦手だったので参加せず帰りました。
終わりに
宿は早く取りましょう!!!!!
横浜スタジアムでイベントがあったようでホテルがどこも埋まっているし高いしで、2ヶ月前くらいに予約をしたもののホテルを探すのが大変でした。
今年は悔しい結果だったのでまた来年以降チャレンジしたいです!
JAG夏合宿参加記2023
9月16日〜9月18日に国立オリンピック記念青少年総合センターで行われたJAG夏合宿にチームtriC_Hinoの3人(kyaさん,nattonatoさん,igeee)で参加しました。3日間で3-5-5hのコンテストとABC、ARCのおまけ付きで大変でしたが楽しめたので行って良かったなーとおもってます。

1日目
家から会場最寄りの参宮橋まで1時間くらいだったものの、新宿で京王線から小田急に乗り換えるときに京王新線に行く方の改札から出たせいで迷ってしまう。それでもかなり余裕を持ってついたので良かった。
簡単な自己紹介とかのオリエンテーションがあった後に3hのコンテスト。コンテストは韓国の国内予選だったらしい。

1日目はACEKの4完でEは英語力が足りなくて価値の合計をbピッタシにしないといけないと思ってずっと考えてたら、b以下で良かったらしく時間を食ってしまった。Fのグラフの問題ができなかったのでアップソルブしたい。(さっきアップされてる場所を見つけた。)
コンテストの後は解説があり、問題セットとして採用するために、スタッフの方が公開されてから誰にも解かれてなかった問題(H?)をACした話とかを聞いてすげーってなった。
解説の後は夜ご飯食べて宿舎に行って風呂に入ってABC。部屋はhiryuNさんとtorisasamiさんと一緒でした。2人とも優しくて部屋でも楽しかったです。
ABCは入青は決められなかったもののHighest付近まで復帰。終わった後で部屋で感想戦をしてFの解説をしてもらいました。
igeeeさんのトヨタ自動車プログラミングコンテスト2023#5(AtCoder Beginner Contest 320)での成績:670位
— igeee (@igeeeeee_) September 16, 2023
パフォーマンス:1749相当
レーティング:1573→1592 (+19) :)#AtCoder #トヨタ自動車プログラミングコンテスト2023#5(ABC320) https://t.co/Lo65QypVmE
普通に疲れてたのでABCの後は12時前に就寝。
2日目
朝食が7時半からで7時20分に起きた。夏休みは早くても8時以降にしか起きたことがなかったが普通に起きれた。
朝食を食べてコンテスト準備をして2日目のコンテスト。2,3日目のコンテストは10時-15時でお菓子は会場にたくさん用意されてるものの弁当はないので絶対お腹が空くと思いおにぎりを3つ買っていった。
合宿費を500円くらい上げてでもコンテスト中のおにぎり2個はほしいかなと思った。
#JAGSummerCamp2023 pic.twitter.com/OZdiFdsmoe
— tatyam (@tatyam_prime) September 17, 2023
2日目のコンテストはACHの3完でどれも小さいケースで試してエスパーした。Aは1時間近く一人でサンプルを使って試してて通してドヤッと思ったら他のチームにだいたい通されてた。Hはnattonatoさんがひたすら試してエスパーしてて解説と全然違ったのですごかった。Kは頂点倍加ダイクストラを工夫すればいけると思っていたものの工夫で改善されるところ以外で普通に計算量がだめでACならず。コンテスト後にyukicoに問題がアップされたので解説ACできてありがたかった。
コンテスト後は夜ご飯、風呂、ARC。1日目より時間に余裕があったのでARC前に仮眠を取ったりした。
igeeeさんのAtCoder Regular Contest 165での成績:1094位
— igeee (@igeeeeee_) September 17, 2023
パフォーマンス:1340相当
レーティング:1592→1569 (-23) :(#AtCoder #ARC165 https://t.co/ETimlOFPPp
ARCは入青チャンスだったもののAB2完遅めでうまく行かず...
B問題でランダムテスト書いてハックケースに気づけて直せたのは良かったものの愚直解がバグってなければ1時間近く早くACできたので惜しかった。
ARCは部屋で3人とも参加したため、3人で机を離して2時間無言でコンテストに参加するちょっと新鮮な体験だった。
3日目
朝からシーツを集めてスタッフ部屋に持っていったり、チェックアウトの準備をしたりで朝忙しかった。
朝食の後2日目と同様におにぎりを買ってコンテスト準備からのコンテスト。
Day 3#JAGSummerCamp2023 pic.twitter.com/EPEmJDbfif
— tatyam (@tatyam_prime) September 18, 2023
3日目は簡単枠ABの2完だけでちょっと残念だった。Fが誰も通してないような問題なのに最初制約を読み違えて二次元累積和するだけじゃんと思ってちょっと書いたりしてた。
自分はIを担当していて方針そのものは良くなかったもののペアを作るみたいな着眼点は悪くなかったので流石に通したかった。またJも惜しいところまで行っていたようでJに集中していたらJは通ったかもしれないので作戦をもう少し考えたほうが良かったかもと思った。
コンテスト後は解説の後に16時すぎに解散。時間が早かった分帰りの電車も空いていてたので良かった。
おまけ
配られる2枚のシーツの2枚目の使い方が非自明だった。
楽しかったので来年も参加したいなーと思いました。後、写真とか撮ればよかったかも。
ICPC2023国内予選参加記
ICPC2023国内予選にkyaさんとnattonatoさんと3人でチームtriC_Hinoから参加し3完58位でした。まだ確定してはないですが地区予選に進めそうなので嬉しいですアジア地区予選確定しました!やったあ!準備したこととか模擬国内、国内本番の話を書きます。

準備したこと
基本的には週1でチームで集まって過去問を本番と同じ環境で解く練習をしました。今年のルールは3人で1台しかパソコンが使えないので誰が実装するかその間どうするかとかを考えました。
個人としては構文解析の対策を重点的にやりました。構文解析の対策をしている人が誰もいなかったのでアジアのボーダーになってくるC問題やD問題で構文解析が出た時に対応できることを目標に勉強しました。
使ったサイト
はまやんさんの問題まとめのほうは半分くらいしか解けなかったので今後またチャレンジしようと思います。とりあえずBNF(Backus-Naur 記法)から構文木を構築し可換群なら2分木にしたりとかはだいたいできるようになりました。ただ、構文解析の問題は構文木にしてから探索したりする部分も大変だったりして、木にした後ができない問題もままあり今後の課題かなと思ってます。
また、構文解析の問題はマクロ定義とか除いてもコードが300行くらいになってしまう問題も少なくなくやってるうちに実装力がついた気はします。
・構文解析の問題例
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0109&lang=ja
まあ本番はボーダーラインの問題にはでなかったのでちょっと残念というか、出てもできるか怪しいので出なくて良かったというか...
模擬国内
模擬国内は3完50位でした。B問題を担当するも途中で浮動小数点つかってバグらせ変わってもらったり、D問題をDPで押し切りたかったものの定数倍を落とす工夫が思いつかず実行が数時間かかってしまい解ききれず個人的には残念でした。
できなかったD問題を後輩が畳み込みを使って解く解法で通してて、解説してもらいすげーとなったんですが、いかんせんフーリエ変換周りがあんまり分かってないのですげーとしか分からなかったので勉強しておきたいです。
国内本番
本番当日は始まる3時間前くらいに会場の研究室に行ってライブラリを印刷してもらったりPCの環境の準備をしました。マウスとキーボードはkyaさんがゲーミングな光るやつを持ってきてくれたのでずっと光っててよかったです。
監督員としてお願いしていた先生が「定刻に向かいます」との話だったのですが、本当に本番が始まる16時半ぴったしに来たのはとても焦りました。とはいえ大会中、3時間もいなきゃいけないのに監督員を引き受けてくださって感謝しかないです。
本番が始まったらnattonatoさんにAを通してもらいその間に自分がBを読んでると、Cがパズル問題で誰がやっても変わらなそうということとBが適当に全探索すれば通りそうということが分かりBを実装の速いkyaさんに任せてCを考えることにしました。

C問題はnattonatoさんが行だけで完結する操作を行ごとに行いそれを列に対してもおこなえば良さそうという方針を示してくれたので行で完結する操作を考えました。すると奇数番目と偶数番目のグループに分けて奇数番目を前に偶数番目を後ろに持っていけば条件を満たすと気づきそれを実装して通しました。実はこの解法が解説解とドンピシャで一致していたこともあり実装も大したことなくCをかなり早く通せました。

残りの時間はD問題を考えていて、チーム内で
・2^nの和を考えると必要な問題の数は最大7個
・6個でできるかが分かればいい
というところまで分かっていて、計算量が100C6 * 100くらいから落ちず悩んでいたのですが、なんと3人共配点の合計が満点に等しいという条件を見逃していることに終了15分前に気づき、現実的な時間で解ける方法が思いつくも流石に間に合わず3完で終了になりました。
反省点としては最初に問題が両面で印刷されてしまい、ちょっとやりづらいけどいいかと思ってそのままやっていたのですが、余裕のあるタイミングで全員分片面で問題を印刷し直しておけばもしかしたらもう少し早く気付けたかなと思いました。
結果的には誰が実装するかという作戦と運が噛み合い3完早解きができたのでまあよかったかなと思ってます。アジア地区予選に向けてまた頑張りたいです。
(首都大学東京じゃなくて東京都立大学なのでそれもいつか直って欲しいですね。個人的には首都大学東京のほうがかっこいい気がするのでこのままでもいいのですが)
春休みにプログラマーのアルバイトをした話
春休みに1ヶ月半くらいプログラマーのアルバイトをしたのでその話を書きます。
勤務先、待遇とか
勤務先: キャロットソフトウェア株式会社 八王子開発室
時給: 1200円
勤務時間: 5時間 (11:00 ~ 17:00, 12:00 ~ 13:00休み),週4日
勤務内容: C#、.NET Framework を使ったWebアプリケーションのプログラム作成、テスト
勤務内容は私が行ったときがそれをやっていたというだけで他にも色々やっているようです。
応募の話
1月に春休みにバイトしなきゃなーと思い「八王子 大学生 バイト プログラミング」とググったらこの会社が出てきたので、バイトネットかなにかからメールして応募しました。実務経験はなく(なんならバイトの経験もない)ポートフォリオとかも用意してないので経験不問ということと、自宅から通いやすいということで応募しました。また怪しい会社じゃないかホームページを見て一応確認しました。
数通人事の方とメールのやり取りをしたあと会社に面接に行きました。服装はわからなかったので調べまくりオフィスカジュアル的なのが良いと思い、ジャケットとスラックスをユニクロで買って、買ってから一度も履いてなかった革靴を履いて行きました。面接ではプログラミングの経験について主に聞かれ、最近は毎日競プロやってますという話と1年の頃WEBアプリ作ったりハッカソンに参加したりしてGit周りとかCRUD処理とかMVCモデルとかはまあまあ分かりますみたいなことを話しました。面接の相手の方が競プロは名前は知っているもののどんなものかはあまり知らないようで説明が上手くできず苦労しました。面接の後数日後採用のメールが来て働くことに決まりました。
お仕事の話
環境
職場は30人が入る教室くらいのサイズで7人前後が働いてるという感じで他の人と適度な距離があってよかったです。服装は上に書いた通りの感じで、社員の人はスーツでした。当然パソコンで作業をするわけなのですがパソコンはノートパソコンで若干古め(?)のWindowsでした。私はiphone,iPad,MacBookとなぜかApple信者なのでWindowsをほぼ触ったことがなくショートカットとかでかなり苦戦しました。後、フォントとか画面の微妙なデザインも全体的に気に入らなかったのでやっぱりパソコンはMacに限るなと思いました。
お仕事
最初の2,3日はC#の基本から.NET Framework を使って簡単なアプリを作る本を渡されそれで勉強しました。C#自体はJavaとかC++みたいな感じですんなり入れて、クラスとかの話は大学の授業の復習になってよかったです。勉強してるだけの日もお給料がもらえました。その後は実際にアプリケーションの機能の実装に移ったのですが、プロジェクトに新しい要素を追加するというので、そもそものプロジェクトが何をやっているかとか何をしたらいいか理解するのに数日かかり大変でした。最初は画面周りの作成を任されレイアウトの作成とかボタンを押したら反応するようにとか、テキストボックスの入力を受け取れるようにしたりとかしました。既存のプロジェクトを参考にやるわけなのですが見ても最初はよくわからず大変だったものの、分かってくると嬉しかったです。
その次の期間はテストをやりました。テストはテスト項目があってそのとおり動いたり表示したりできるか確認することをしました。テストするのは間違えないようにやって結果とかをちゃんと確認すればいいので比較的かんたんでした。
最後の方は選択した項目を元に計算を行いそれを表形式にして印刷できるようにする機能の実装を行いました。クラスをいくつも作ったりデータベースとやり取りするためにSQLを埋め込んだり得られたデータを処理したりとかなり大変でした。クラスもインターフェースとか知識としてはあったものの実際に実装したことはなかったので勉強になりました。SQLは参考にできるものがあったものの、数十行にもなりなかなか大変で見たことない文もあって理解に時間がかかりました。大学のデータベースの授業をちゃんとやってたのが役立って良かったです。その後の処理の部分は参考にできるものがなかったりして困ったのですがそこは競プロで培った実装力でなんとかなりました(詳しくは競プロは役立ったのかの項で)。時間はかかってしまったのですが、結局機能の実装までたどりつけて良かったです。
良かったこと
バイト先で良かったこと
・上司の人とか周りの人が優しかった。怖い人とかいなかった。
・バイトの時間の自由度が高かったこと。
・大学生に対する理解があったこと。最初はできるだけ長期で働きたいと言っていたものの3年前期に授業の関係で続けるのが難しそうなことを伝えたらすんなりやめることができた。(ちゃんと辞める一ヶ月前には伝えた)
バイトしてよかったこと
・お金がもらえた。家で使うキーボードを買いました。
・コミュニケーション能力の多少の向上。メールをしなくてはならない場面があったのでたくさんググった。「承知しました」は分かったの意で目上の人に使うというのも知った。
・働くってどういうことなのかが知れた。新しい経験ができた。
・今までの長期休みよりは有意義に過ごせた気がする。
・メモを取るのって大事だなと気づいた。突然新しい知識とか知らないといけないことの雨が降ってきてそれをできるだけ理解し貯めておくにはメモを取るしかなさそう。
不満を持ったこと、上手く行かなかったこと
職場の不満
・windows。というか全体的にツールが使い慣れなかったのでしょうがないのだがストレスではあった。
・静かで人と人との距離もあり過ごしやすさはあったのだが、静か故に少し話しかけにくいというのはあった。
上手く行かなかったこと
・分からないことを分からないなりに上手く質問するということ。分からないことを人に聞くということがほぼないので、(というか分からない時は何がわからないのか分からないので聞きようがなく、逆に今何が分かっていないのかが分かれば調べたりして自分で解決できることが多いと思っている) 理解ができなかったり詰まったりした時にすぐに聞くことができず何が分かっていないのかをわかるようにしてから聞いたりしたので時間がかかってしまった。分からないことを分からないままに自分の理解を促進するための質問をするということが(そんなことできるのか知らないが)もう少しできれば効率的にできたと思う。
また、チャットでのコミュニケーションが多く、今質問のチャットを飛ばしていいものかと躊躇することも多かったので上手く判断ができればよかった。多分どんどん聞いたほうが良かったと後からは思う。
競プロは役に立ったのか
直接的に役立つことはあまりなかったものの、間接的にだったり部分的に役立つことはありました。伝家の宝刀✝二分探索✝を使って実装したりということもなく直接役立ったとはあまり感じなかったのですが、コードの理解とかでは間接的に役立ったのかなと思います。部分的にというのはデータを処理する過程で以下の問題のようなことを考える必要がある場面がありました。
問題
高橋くんはクラスのゴミ拾い活動の結果について送られてきたデータを指定の形式にして報告する仕事を頼まれましたが、当日、高橋くんが休んでしまったので高橋くんの代わりに仕事をするプログラムを作成してください。
送られてくるデータはグループ番号S、生徒名T、生徒Tが集めた可燃ゴミの数A、生徒Tが集めた不燃ゴミの数Bからなります。
出力するデータは送られてきたデータに加えてグループごとの集めたゴミの数、クラス全体で集めたゴミの数を種類ごとに報告する必要があります。
入力
入力は以下の形式で与えられます。
N
S1 T1 A1 B1
S2 T2 A2 B2
...
SN TN AN BN
1行目には整数N(1 <= N <= 10^4)が与えられます。
続くN行は送られてくるデータの内容でi(1 <= i <= N)行目には
グループ番号Si、生徒名Ti、生徒Tiが集めた可燃ゴミの数Ai、生徒Tiが集めた不燃ゴミの数Biが空白区切りで与えられます。
・Siは整数でグループ番号の昇順になっている(1 <= Si <=N かつ i>=2について Si-1 <= Siを満たす)。
つまり1 <= S0 <=Si <= SN <= Nを満たす。
・Tiはa~zの英小文字からなる文字列で(1<=(Tiの長さ)<= 100)を満たし,i≠jならばTi≠Tj。
・Ai,Biは整数で(0 <= Ai,Bi <= 10^3)を満たす。
出力
N+(グループの数)+1行出力せよ。ここで、グループの数とはグループ番号の集合の要素数のことである。
入力で与えられたデータを1行ずつ出力し、あるグループ番号Sxを持つデータをすべて出力したら、その次の行にSxとそのグループに属する生徒が集めた可燃ゴミの合計数と不燃ゴミの合計数を空白区切りで1行出力せよ。
また、入力で与えられたデータN個と、グループごとの合計を全て出力したらN+(グループの数)+1行目に Total という文字列と、クラスのN人全員が集めた可燃ごみの合計数と不燃ゴミの合計数を空白区切りで出力せよ。(入出力例1を参照のこと)
入力例1
5
1 suzuki 0 3
1 tanaka 10 2
2 yamamoto 31 27
2 sato 8 123
4 kato 19 0
出力例1
1 suzuki 0 3
1 tanaka 10 2
1 10 5
2 yamamoto 31 27
2 sato 8 123
2 39 150
4 kato 19 0
4 19 0
Total 68 155
----------------------------------------------
1番目のグループは可燃ゴミを0+10=10個、不燃ゴミを3+2=5個集めたので、3行目にグループ番号の1と可燃ゴミの10と不燃ゴミの5を出力します。
2番目のグループは可燃ゴミを31+8=39個、不燃ゴミを27+123個集めたので6行目にグループ番号の2と可燃ゴミを39と不燃ゴミの150を出力します。
3番目のグループは一人しかおらず、8行目にグループ番号の4と可燃ゴミの19、不燃ゴミの0を出力します。
ここで、N=5行のデータと、グループの合計3行を出力し終えたので、最後に5+3+1=9行目に Total と全員が集めた可燃ゴミの合計10+39+19=68と不燃ゴミの合計5+150+0=155を出力します。
入力例2
1
1 abcdefghijklmnopqrstuvwxyz 0 0
出力例2
1 abcdefghijklmnopqrstuvwxyz 0 0
1 abcdefghijklmnopqrstuvwxyz 0 0
Total 0 0
----------------------------------------------
データが1行しかないときもグループの合計と全体の合計を出力することに注意してください。
(問題終わり)
設定は適当です。問題自体はABCのB問題くらいでしょうか?(作問したことないので日本語的な曖昧さとか不十分な点があったらごめんなさい)
こういった問題に落とし込むことができれば後はやるだけなのですが要件から何が必要なのか見抜くという点と、なれていないとこのような問題もサクッとはできないかも知れないので基本的な実装力という点で競プロが役に立ったかなと思います。
終わりに
初めてのバイトとしてはとても良い経験だったと思います。ただ感想として大きかったのは働くって大変なんだなということで、週20時間程度でも結構疲れてしまったため将来がとても不安になりました。また何かしらアルバイトに挑戦しようかと思います。
読んでくださりありがとうございました。
ICPC2022アジア地区横浜大会参加記
ICPC2022のアジア地区予選にチームtriC(東京都立大学)で参加しました。結果はA,B,Gができて38位でした。
いろいろ書いたので雰囲気を感じてもらえたら嬉しいです。

チーム構成
チームは都立大の競プロサークルの人で集まって参加しました。学年は学部4年,2年(私),1年でatcoderの色は国内予選の時は青茶灰、横浜大会の時は青緑茶でした。
以前は都立大も競プロがもう少し流行っていたそうですが、今は全然やってる人がおらず国内予選も自分達のチーム以外は都立大から参加するチームはありませんでした。
横浜大会追加招待

国内予選は自分はBを沼らせた以外何もできなかったのですがチーム4完と例年なら地区予選が確定的な結果だったものの選抜基準に基づいた順位だと43位で横浜大会大会の選抜40チームには惜しくも入れませんでした。しかし、11月の初めにメールが届き追加招待で参加できる事になりました。
横浜大会への準備
準備したことは問題を解くための準備と参加するための準備に分けて書きます。
問題を解くための準備
問題を解くための準備としては過去問を解くというのと持っていくライブラリを揃えるというのをやりました。
過去問を解く
過去問は英語の問題になれるために、AOJでICPCの過去問を自分で何問か解きました。最初は辞書を使ったりしたものの数回やると問題に関係する部分は同じような単語が出てくるし、入力例をちゃんとチェックするとだいたい理解できるので本番も含め辞書を使うことはほとんどありませんでした。
問題を解く際にはAOJのチャレンジで本番形式の練習を、ICPCの問題がまとまっているサイトで自分が解くだろうレベルの問題の練習をしました。本番形式の練習は1人だと全然やる気が起きず1回だけ、チームでも1回だけやりました。
ライブラリを揃える
ライブラリの整理は横浜大会では電子機器の使用、ネットワークの利用ができないものの紙の媒体ならいくらでも持ち込んでいいとのことなので用意しました。用意としては鉄則本を持っていき、また自分がいつも使っているライブラリをtexで整えて大学でプリントアウトしました。
本番ではVsCodeのコード補完とかも使えないのでしっかり持っていってよかったと思いました。

参加するための準備
参加するための準備としては、宿の確保とチーム紹介ドキュメント、チーム紹介スライドの用意をしました。
宿の確保
チーム全員会場まで1時間位だったので各々宿を取りました。宿泊費が7000円(交通費も合わせると1万円)大会の方から頂け、自分で宿を取ったことがないだけでなく旅行もほとんど行かないので有名なホテルにしようと決め、横浜スタジアム側の東横インに6000円位で泊りました。予約はヤフートラベルで予約し、領収書をpdfで出力しました。
チーム紹介ドキュメント

チーム紹介ドキュメントはリハーサルの日に印刷されたものが渡されました。
アスキーアートとか、短く数行のチームが多く、バチバチにチーム紹介をしているチームはあんまりなかったです。
最近流行りのChatGPLとの対話を載せてるチームも2つほどありました。QRコードを作ったチームがあったようですがQRコードの部分が文字化けで見れなかったのでちょっと残念でした。


チーム紹介スライド

スライドはこんな感じで他のメンバーが作ってくれました。かわいい絵がいっぱいのチームとかもありました。
チームの紹介も全然考えてなかったのですが4年の方がいい感じに話してくれました。
例年英語でのチーム紹介らしいですが、今年は日本のチームしかいなかったので日本語で良かったです。

大会1日目

会場の横浜産業貿易センターは、みなとみらい線の日大通り駅から5分くらいでした。
会場はほぼほぼスタッフの方も含め日本人だったものの、説明などは全部英語でびっくりしました。また、事前に寒いと言われていた割には会場が暖かく過ごしやすい温度でした。

会場では支給されたTシャツを着て、ネームプレートをつけて過ごしました。流石に半袖1枚ではとても過ごせないので長袖の上に着る形でしたが、いつもMサイズなのでMサイズを頼んでしまったので若干きつかったです。
リハーサルではPCの使い方を確認して問題をちょっと解きました。キーボードがUS配列なのと、ストロークの深いキーボードで私は全く対応できませんでした。VsCodeは使えるものの、ネットワークには繋げられないのでC++とかの拡張を入れられずコンパイルエラーをエディタが指摘してくれないのでとても苦労しました。
開会式は最初のオープニングムービーがすごくかっこよかったです。
予定より1時間くらい早く1日目の日程が終わり、その後は宿に行ってチェックインしました。
夜ご飯は明日に備えて松屋とかで済ませる予定だったのですが、顧問の先生がおすすめだというお店に行きました。
宿に戻りユニットバスの使い方を調べゆっくり温まりその後ぐっすり寝ました。
大会2日目
朝は予定通りの7時にしっかり起きれて東横インの朝ごはんを食べてからチェックアウトし会場に向かいました。東横インの朝ごはんはビュッフェ形式で食べれたのでとても良かったです。
コンテスト中の話
チームの方針としてはまず初めの簡単な2問を解き、その後他のチームが解けた問題をみて解けそうな問題を1問以上解くという感じでした。
コンテスト開始と同時にパソコンにログインし、全員でA問題を見ました。なんか貪欲っぽいけどすぐわからなかったので実装してもらい、自分はBに移行しました。
Bはインタラクティブ問題で、制約から各桁を2分探索すればできそうと割とすぐ分かり、AがACしてから自分が実装に取り掛かり提出したらWAが返ってきてびっくりしました。なかなかWAが取れなかったもののなんと"query a"と出力しなくてはいけないところを"a"としか出力してなかったのが原因でもったいないミスでした。
その後は周りの様子をみてD,F,G辺りが狙い目っぽかったのでDの実装をしてもらっている間にGを考えていると入り口と出口からの最短距離をメモしておいて繋がってないところをつなげて試すという方針でできそうと分かりました。Dが沼ってそうだったので、全員でGを考えて実装する事になったのですがぼちぼち実装が大変で自分がなれてない入力形式だったので実装はおまかせすることにしました。バグ取りと、入り口と出口からの距離が同じになる時(この時はループができて木じゃなくなる)を省くことで終了40分前にGがACできました。その後、考えてもらっていたDができそうということで実装してもらうも時間が足りず終了しました。
コンテスト中は印刷ができるのですが、最初は何に使うのかが分からなかったものの、紙で印刷することで複数人でデバッグができるので数回利用しました。
コンテスト中にマイセンのお弁当が配られたり、水が配られたり、お菓子が取り放題だったりと飲食には不自由しませんでした。
私はコンテスト中ずっとお腹が痛かったのでいっぱいトイレに行きました。
コンテスト後
コンテストが終わった後、協賛企業のブースが見学できたので行きました。不動産とか一見アルゴリズムとか関係のなさそうな企業でもアルゴリズムの使い道があるんだなと思いました。遊べるブースとかもあったもののあんまり時間がなかったので遊べませんでした。
見学時間の後は結果発表でテンポが良くあっという間でした。優勝は東工大のtonosamaで東大以外が優勝したのは13年ぶり(?)らしいです。
閉会式の後も企業ブースの見学の時間があったのですが、お腹が痛いので帰りました。
感想
オンサイトのコンテストは初めてだったものの雰囲気が新鮮で楽しかったのでICPCに参加してよかったなと思いました。また地区予選に出れるように頑張ろうと思います。
