ICPC2023アジア地区予選参加記

11月25,26日でICPC2023アジア地区予選にチームtriC_Hinoで参加しました。

 

コンテスト結果

地区予選の結果は2完56位と残念な結果でした😥。チーム的には3完以上を目標にしていて練習でも比較的安定して3完できていたので2問しかできなかったのは残念でした。

 

チームメンバー

・Kyaさん : M1、青。最近はあんまりコンテストに出てないみたいだがなぜか強い。

・nattonatoさん : B4、水。卒論が忙しそう... 考察のピンポイントをよく当ててくる印象。

・私(igeee):B3、青。地区予選の1週間前に青になった。

コンテスト前まで

国内予選が終わり、地区予選参加が決まってから、JAGの夏合宿に参加したり、直前2ヶ月は毎週集まって過去問をやったりUniversalCupに参加したりしました。去年は追加招待(繰り上げ)で準備する時間があまりなかったのですが、今年はそれなりに準備に時間を使うことができました。

JAGの夏合宿に参加した話↓

igeee.hatenablog.com

 

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日目の結果 (出典:https://x.com/Selfgrudge/status/1702986659648963027?s=20)

1日目はACEKの4完でEは英語力が足りなくて価値の合計をbピッタシにしないといけないと思ってずっと考えてたら、b以下で良かったらしく時間を食ってしまった。Fのグラフの問題ができなかったのでアップソルブしたい。(さっきアップされてる場所を見つけた。)

コンテストの後は解説があり、問題セットとして採用するために、スタッフの方が公開されてから誰にも解かれてなかった問題(H?)をACした話とかを聞いてすげーってなった。

 

解説の後は夜ご飯食べて宿舎に行って風呂に入ってABC。部屋はhiryuNさんとtorisasamiさんと一緒でした。2人とも優しくて部屋でも楽しかったです。

 

ABCは入青は決められなかったもののHighest付近まで復帰。終わった後で部屋で感想戦をしてFの解説をしてもらいました。

 

普通に疲れてたのでABCの後は12時前に就寝。

 

2日目

朝食が7時半からで7時20分に起きた。夏休みは早くても8時以降にしか起きたことがなかったが普通に起きれた。

 

朝食を食べてコンテスト準備をして2日目のコンテスト。2,3日目のコンテストは10時-15時でお菓子は会場にたくさん用意されてるものの弁当はないので絶対お腹が空くと思いおにぎりを3つ買っていった。

合宿費を500円くらい上げてでもコンテスト中のおにぎり2個はほしいかなと思った。

2日目のコンテストはACHの3完でどれも小さいケースで試してエスパーした。Aは1時間近く一人でサンプルを使って試してて通してドヤッと思ったら他のチームにだいたい通されてた。Hはnattonatoさんがひたすら試してエスパーしてて解説と全然違ったのですごかった。Kは頂点倍加ダイクストラを工夫すればいけると思っていたものの工夫で改善されるところ以外で普通に計算量がだめでACならず。コンテスト後にyukicoに問題がアップされたので解説ACできてありがたかった。

 

コンテスト後は夜ご飯、風呂、ARC。1日目より時間に余裕があったのでARC前に仮眠を取ったりした。

ARCは入青チャンスだったもののAB2完遅めでうまく行かず...

B問題でランダムテスト書いてハックケースに気づけて直せたのは良かったものの愚直解がバグってなければ1時間近く早くACできたので惜しかった。

ARCは部屋で3人とも参加したため、3人で机を離して2時間無言でコンテストに参加するちょっと新鮮な体験だった。

 

3日目

朝からシーツを集めてスタッフ部屋に持っていったり、チェックアウトの準備をしたりで朝忙しかった。

 

朝食の後2日目と同様におにぎりを買ってコンテスト準備からのコンテスト。

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問題で構文解析が出た時に対応できることを目標に勉強しました。

使ったサイト

構文解析 Howto · GitHub

blog.hamayanhamayan.com

はまやんさんの問題まとめのほうは半分くらいしか解けなかったので今後またチャレンジしようと思います。とりあえずBNF(Backus-Naur 記法)から構文木を構築し可換群なら2分木にしたりとかはだいたいできるようになりました。ただ、構文解析の問題は構文木にしてから探索したりする部分も大変だったりして、木にした後ができない問題もままあり今後の課題かなと思ってます。

また、構文解析の問題はマクロ定義とか除いてもコードが300行くらいになってしまう問題も少なくなくやってるうちに実装力がついた気はします。

構文解析の問題例

https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0109&lang=ja

まあ本番はボーダーラインの問題にはでなかったのでちょっと残念というか、出てもできるか怪しいので出なくて良かったというか...

 

模擬国内

jag-icpc.org

模擬国内は3完50位でした。B問題を担当するも途中で浮動小数点つかってバグらせ変わってもらったり、D問題をDPで押し切りたかったものの定数倍を落とす工夫が思いつかず実行が数時間かかってしまい解ききれず個人的には残念でした。

できなかったD問題を後輩が畳み込みを使って解く解法で通してて、解説してもらいすげーとなったんですが、いかんせんフーリエ変換周りがあんまり分かってないのですげーとしか分からなかったので勉強しておきたいです。

 

国内本番

icpc.iisf.or.jp

本番当日は始まる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ヶ月半くらいプログラマーのアルバイトをしたのでその話を書きます。

 

 

勤務先、待遇とか

勤務先: キャロットソフトウェア株式会社 八王子開発室

www.carrotsoftware.co.jp

 

時給: 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位でした。

 

いろいろ書いたので雰囲気を感じてもらえたら嬉しいです。

 

icpc横浜大会順位

 

チーム構成

チームは都立大の競プロサークルの人で集まって参加しました。学年は学部4年,2年(私),1年でatcoderの色は国内予選の時は青茶灰、横浜大会の時は青緑茶でした。

 

以前は都立大も競プロがもう少し流行っていたそうですが、今は全然やってる人がおらず国内予選も自分達のチーム以外は都立大から参加するチームはありませんでした。

 

横浜大会追加招待



国内予選は自分はBを沼らせた以外何もできなかったのですがチーム4完と例年なら地区予選が確定的な結果だったものの選抜基準に基づいた順位だと43位で横浜大会大会の選抜40チームには惜しくも入れませんでした。しかし、11月の初めにメールが届き追加招待で参加できる事になりました。

 

横浜大会への準備

準備したことは問題を解くための準備と参加するための準備に分けて書きます。

 

問題を解くための準備

問題を解くための準備としては過去問を解くというのと持っていくライブラリを揃えるというのをやりました。

過去問を解く

過去問は英語の問題になれるために、AOJでICPCの過去問を自分で何問か解きました。最初は辞書を使ったりしたものの数回やると問題に関係する部分は同じような単語が出てくるし、入力例をちゃんとチェックするとだいたい理解できるので本番も含め辞書を使うことはほとんどありませんでした。

問題を解く際にはAOJのチャレンジで本番形式の練習を、ICPCの問題がまとまっているサイトで自分が解くだろうレベルの問題の練習をしました。本番形式の練習は1人だと全然やる気が起きず1回だけ、チームでも1回だけやりました。

AOJのチャレンジ

ICPCの問題がまとまっているサイト

 

ライブラリを揃える

ライブラリの整理は横浜大会では電子機器の使用、ネットワークの利用ができないものの紙の媒体ならいくらでも持ち込んでいいとのことなので用意しました。用意としては鉄則本を持っていき、また自分がいつも使っているライブラリをtexで整えて大学でプリントアウトしました。

本番ではVsCodeのコード補完とかも使えないのでしっかり持っていってよかったと思いました。

ライブラリの例

参加するための準備

参加するための準備としては、宿の確保とチーム紹介ドキュメント、チーム紹介スライドの用意をしました。

宿の確保

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

チーム紹介ドキュメント

チーム紹介ドキュメントはリハーサルの日に印刷されたものが渡されました。

アスキーアートとか、短く数行のチームが多く、バチバチにチーム紹介をしているチームはあんまりなかったです。

最近流行りのChatGPLとの対話を載せてるチームも2つほどありました。QRコードを作ったチームがあったようですがQRコードの部分が文字化けで見れなかったのでちょっと残念でした。

 

チーム紹介スライド

スライドはこんな感じで他のメンバーが作ってくれました。かわいい絵がいっぱいのチームとかもありました。

チームの紹介も全然考えてなかったのですが4年の方がいい感じに話してくれました。

例年英語でのチーム紹介らしいですが、今年は日本のチームしかいなかったので日本語で良かったです。


 

大会1日目

会場の横浜産業貿易センターは、みなとみらい線の日大通り駅から5分くらいでした。

会場はほぼほぼスタッフの方も含め日本人だったものの、説明などは全部英語でびっくりしました。また、事前に寒いと言われていた割には会場が暖かく過ごしやすい温度でした。

会場では支給されたTシャツを着て、ネームプレートをつけて過ごしました。流石に半袖1枚ではとても過ごせないので長袖の上に着る形でしたが、いつもMサイズなのでMサイズを頼んでしまったので若干きつかったです。

 

リハーサルではPCの使い方を確認して問題をちょっと解きました。キーボードがUS配列なのと、ストロークの深いキーボードで私は全く対応できませんでした。VsCodeは使えるものの、ネットワークには繋げられないのでC++とかの拡張を入れられずコンパイルエラーをエディタが指摘してくれないのでとても苦労しました。

 

開会式は最初のオープニングムービーがすごくかっこよかったです。

 

www.youtube.com

 

予定より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年ぶり(?)らしいです。

www.youtube.com

 

閉会式の後も企業ブースの見学の時間があったのですが、お腹が痛いので帰りました。

 

感想

オンサイトのコンテストは初めてだったものの雰囲気が新鮮で楽しかったのでICPCに参加してよかったなと思いました。また地区予選に出れるように頑張ろうと思います。