Euldernaの競技プログラミングメモ

主に気になった問題やライブラリの確認に使った問題を示します。

ICPC参加資格について日本語版公式より詳しくまとめてみる(2020年執筆)

みんながICPC参加記書いていたので僕も描きたくなった。

この記事は何?

複雑なICPCの参加資格について情報をまとめたものです。筆者は2020年にコーチとして資格の延長申請をすることになり多くの情報収集をしたので、その情報について主にまとめたものになります。そのため情報が古くなった場合はご容赦願います。*1

対象読者は自分がICPCの参加資格を持っていないか分からない微妙なラインにいる人たち向けです。

記事は次の2トピックに分かれています。

  • 基本資格
  • STEMって何?

基本資格

例年のICPC参加資格についての日本語での案内は例年、日本地区の公式サイト(参加資格 | ICPC 2020 Asia Yokohama Regional)に乗っており2020年度版は以下の通りになっています。

  1. 大学、大学院、短期大学(専攻科を含む)、高等専門学校(4年次以上、専攻科を含む)のいずれかの学生であること。

  2. 過去のアジア地区大会への参加回数が5回未満であること(※国内予選のみの参加を含む)。なお、同じ年に、国内予選、日本開催のアジア地区大会、他のアジア地区大会に参加した場合は、まとめて1回と数える。

  3. 過去の世界大会への参加回数が2回未満であること。 下記2条件の少なくとも1つを満たしていること。

  4. 大学または短期大学に入学(注:複数に該当する場合はもっとも早いもの)したのが、2016年かそれ以降であること。ただし、高等専門学校生及びその卒業生の場合は4年次進級時を上記の「大学入学時」と見なす。 生まれた年が1997年かそれ以降であること(注:年度ではなく年であることに注意)

しかしながらこれらの案内は、日本の教育機関の事情(主に高専)を考慮して要約されたもので、厳密にはICPC公式の英語ページ(The ICPC International Collegiate Programming Contest)を参考にするようページで誘導されています。

英語ページの中にある Eligibility Decision Tree というのが重要で(毎年、更新されるものなのであえてリンクは貼りません)、これを満たしているかどうかで参加資格があるかどうかが分かります。

以下の項目は2020年度版の Eligibility Decision Tree の内容を要約したものです。日本語版の案内では表記されていないものは太字で示します。 項目の順番は分かりやすいように並べ変わられているものがあります。

  • World Final に参加可能で参加する意思があること
  • World Final 開催地に移動可能なビザが取得できて、大学に戻ることが可能であること*2。またそのビザがリージョナル終了後30日以内に取得できること
  • Sponsoring institution*3 のDegree Programに所属していること*4
  • 2分の1以上の授業を履修しているインターン生や交換留学生であること*5
  • 他の大学から今年度のICPCに出場していないこと
  • 世界大会への出場回数が1回以下、ICPCリージョナル(日本国内含む)が4回以下であること

ここまでが Basic Requirements とされているもので、一つでも違反していると参加が認められません。これらの要件は最初のコンテストの日付で判断されます*6

また全てを満たしていても以下の Period of Eligibility のうち一つを満たしている必要があります。

  • 生まれた年が1997年かそれ以降*7
  • 高等教育(post-secondary studies*8)を学び始めたのが2016年か、それ以降*9

ここまでが基本的な要件で、もし何らかの事情で Period of Eligibility の延長を願い出る場合は次の条件を満たす必要があります。

  • Full-time STEM study相当の学習期間が8セメスター*10未満

この要件を満たしており職歴や学歴に関する情報を提出すれば、参加が認めらます。公式ページによるとこれを満たしていれば、ほとんどの場合許可されるようです。逆にこれを満たしていない場合、いくら留学や病気による学業の中断があっても、他チームに不公平であるという理由で延長は認められないようです。

ここらへんの要件が日本語版に記述がないので無駄に延長を願い出てしまったため、この記事を執筆する動機になりました。この項目についてもう少し事項で掘り下げます。

STEMって何?

  • Full-time STEM study相当の学習期間が8セメスター*11未満

上記の項目におけるSTEM studyについて解説します。私が所属する大学院(NAIST)では他学科からの進学も多いため、この規定を使うことがありそうなので後輩のためにこの項目も書くことにします。

ところでみなさん。ICPCに登録して、チーム登録をした後に行う Degree Info の Number of Full-Time STEM Semesters Completed の欄はちゃんと埋めていますか? 去年と同じままにしている人が若干名いるように見受けられますので、正確な記入のために一度、STEMの定義について確認していきましょう。

STEMの定義については英語版Wikipedia(Science, technology, engineering, and mathematics - Wikipedia)が参考になります。

STEMはScience, technology, engineering,and mathematicsの略らしくそれらに関する教育について指すようです。日本においては理工系教育と読み替えても差し支えないように思います。ただし一部の社会系専攻(心理学や経済学)をSTEMに含めることがあるようで、ここら辺の判断に迷った時は ICPC Eligibility Committee に聞くしかないように思います。

オンライン予選の開催時点での修了している学期数を半年を1単位としたものが Number of Full-Time STEM Semesters Completed になります。

実際の事例で困ったのは、教育系数学専攻はSTEMに含まれるのかという内容で、これは後学のためにも日本地区運営にメールすべき案件だったかもしれません*12

連絡先

日本固有の問題に関しては一度、日本地区運営にメールするべきだと思います。ICPC英語サイトには担当者個人のメールアドレスしか記載されていないのですが、日本ICPCサイトにはここにメールしてくれというアドレスがあるのでそこにメールする方がベターだと思います*13。例年、icpc20xx[at].ホスト大学のドメインの形をとることが多いようです。どうやらこれはホスト大学以外の関係者も含めた日本地区の運営全体のメーリングリストになっているらしく、返信はホスト校ドメインからではないことがあることに注意しましょう。(基本的には何らかのacドメインから返信されると思いますが)

Period of Eligibility の延長申請は the ICPC Eligibility Committee にコーチからメールをする必要があります。メールアドレスは上記のICPC英語サイトの方にあるのでそちらを参照してください。 このメールアドレスはどうやらICPC Contest Managerというトップ宛てのアドレスらしく、かなり返信に時間がかかる*14ので気をつけて下さい。コンテストの3週間前までに連絡するよう記載があります。英語メールなので、コーチと申請者の両方でうまく文面を担当しあった方がいいでしょう。 申請を予定している人は早めにコーチを見つけて、メールの文面をコーチに投げておいた方がいいです。

最後に

この記事に関して間違ってそうな記述や誤字があったら、Twitter@ojisan_IT)で教えて下さい。よろしくお願いします。

この記事の内容は2020年当時のものであり、記載された内容について筆者は一切の責任を負いません。

*1:記載された内容について筆者は一切の責任を負いません

*2:日本国籍の場合は基本的に問題ありませんが、朝鮮籍でのアメリカ開催の場合などはこの規定が問題になりそうです。また留学生においても国籍によっては開催国入国に問題が生じる可能性があるので、最寄りの大使館などに確認を取る必要があるかもしれません

*3:ここでのSponsoring institutionは高等教育機関

*4:実はこの規定を考えるとDegree Programに所属していない高専本科4年次生は参加資格がないことになりますが上記の日本語版の参加要件を考慮すると特例で参加が許可されていると考えるのが自然だと思います

*5:インターン先や留学先でその大学のチームとして参加できる規定だと思われますが詳細はよく分かりません。詳しい方がいたら教えて下さい。2分の1も何らかのカリキュラムに対してだと思われますが詳細不明

*6:恐らく日本ではオンライン予選段階 > The eligibility status is determined at the first qualifying contest.

*7:年度じゃないことに注意。1-3月生まれは同級生よりもう一年遅くまで資格がある

*8:これとdegree programの使い分けがよく分かりません

*9:基本的に学部進学時、高専4年進学時が基準年

*10:ここでのセメスターは半年を1単位にするものだと思われます

*11:ここでのセメスターは半年を1単位にするものだと思われます

*12:生まれ年での参加要件を満たしていたのでそこまで深刻に考えていなかった

*13:日本語・英語どちらでも対応してくれそう

*14:最長で5日で決定するって言っているけど、基本的に返信には全て5日かかる

ICPC国内ボーダーで4年間戦った話

最期のICPC国内予選が終わった。 思えば国内を余裕で通過したことなんてないので、いろいろと思い出を文章にした。

2016年(学部2年:Maximum-UniSchoolFleet 88位3完 予選敗退)

当時放送中だったアニメに乗っかって命名した。

C問題だった竹の花までを調子よく通してさぁD問題だとなったコンテストだった。

D問題のだるま落としを前にした考察は不思議と覚えていて、実は全探索回が通るのではないかと思ってとりあえず書いてみたり、何か気づいていない貪欲な方法があるんではないかと思いながら時間だけが過ぎていった。愚直回を前にへらへらと笑いながら、滅茶苦茶悔しかった。

当時の自分は有効なコンパイルオプション、定数倍の高速化、区間DPといったことを知らなかった。終わった後に、サークルの先輩から区間DPであるという話を聞き、自分が蟻本を全く理解していないんだなという事を理解した年だった。

  • Dを通すのが国内予選の大正義
  • 蟻本を基礎からやり直す

みたいなことを翌年までの課題にした気がします。ちなみにそれらは2019年、どちらも達成されていません。

2017年(学部3年:Maximum-omake 54位4完 予選通過)

命名は僕の好きなローグライクゲームに由来。

qcw君、seica君と去年とはまったくチームメンバーが違った。Maximum(埼玉大学プログラミングサークル)の中で強い人間を3人引っ張ってきたメンバーなので敗退は許されなかった。当時の

AtCoder的には緑3人の弱小チームだったので戦略を滅茶苦茶に練った。

A,Cが僕が担当している間にBをqcw君、seica君が担当して全員でDという戦略をとった。

しかし本番中に事件が発生した。Cの考察を終えある程度の実装を詰めたところで、qcw君が実装しているBの方針がまったく分からなかった。自分がむりやり交代する形でB,Cを通して、去年と同じD問題に挑む形になった。(この交代の時、自分自身のメンタルのコントロールがうまくできずかなり厳しい言葉を使ってしまったことを今でもかなり後悔している)

D問題の弁当作りは本当に何も分からずに、とりあえず愚直解を書いた。何かの間違いで高速かもしれないとか思ってた。実際は最悪のテストケースが少なくて(テストケースは想定解のせいか20-30あたりのn,mが多かった)意外と高速に回った(最悪ケースで固まる)。 終了20分前にseica君がnとmの小さい方でbitDPでは? と言った。僕はそれが通る保証もないし今からバグらせずに実装するのは無理だと思って、愚直解枝刈りを書くことにした。 qcw君は本当にできた人間で、B問題でひどい言葉を投げた僕とペアプロをしてくれたりした。

あとは各テストケース5分ずつくらいかけてAC。

そのあとseica君の解法があってることが分かって、ぜってーこいつには勝てねぇわ。となった。 そうしてみんなで仲良くアジア地区。

で終われば良いのだが実は予選落ちしていた。チームで仲良く数えたら枠数が足りていなかった。4完が大正義とは何だったのか しかし当時は謎枠が存在し、運営のお気持ちで数チームが選抜される。加えて一個上のチームが特別枠で予選通過したことで拾われる形で予選通過した。詳しくは順位表ページに詳しい。最下位通過である。 結果が発表されるまでの一週間、何も手につかなかった。

https://icpc.iisf.or.jp/2017-tsukuba/results/

発表時Twitterで必死にエゴサしたりしていたのは秘密 ここからqcw君、seica君が死ぬほど強くなりアジア地区で結構いい成績をとるのだが割愛。

2018年(学部4年:Semuderna 62位4完 予選通過)

チーム名はチームメンバーのPrefixに由来。

qcw君が他大受験に集中するため離脱したので、代わりにmamumamu君が入った。 もうこの当時は普通にseica君が強いのでDは彼に投げた。 A-Cを通せばいいだけのイージーな回のはずで、実際Cは結構早めに方針が立って通した記憶がある。しかしBの折り紙を最後までバグらせ続けてる間にseica君がDを通してしまい死ぬほど焦っていた。 最終的にはseica君に『頼むから俺に任せてくれ』といってBを実装しきった。去年は無理やり交代させておいて、自分の番になるとこの発言。己のワガママさに呆れる。

コンテスト終了後、順位的に通ってるか怪しいので、seica君と順位表を睨みながら数えた。結果、通過していた。

結果として、強い後輩がいればICPCは余裕なんだなと分かった。おすすめのICPC対策です。

2019年(修士1年:Yazaten 78位3完 (多分)予選通過)

チーム名はYazatenさんに由来。

NAIST(奈良にある大学院大学)に進学。人が集まればICPC出たいなぁと思っていたらhrbtさんが声をかけてくれて、hrbtさん・hgs君(競技プログラミング初心者)と参加することになった。

何度かチーム練習をするうちにどうも、このチームでDを解く前提の動きをするのはまずいのではないかと思った。本来であれば、Aをhgs君が実装しているうちにB-Dの考察を他2人が詰めるのが正道であって、A問題はそもそもそのため(初心者がチーム入っても仕事ができるよう)に配置されているはずだと考えていた。

それでも自分がA,Cを解くという早解きを主張したのは、去年の講評から不穏な雰囲気を感じ取ったため結構、強行に早解き戦略を主張した。結果としてhgs君の仕事が無くなってしまってそのフォローアップも出来なかったのはかなり反省している。(gdbの使い方を勉強してもらうとかあった気がする)

ちなみに本番では、30分前に使えていたAtomが起動しないせいでメンタルがぼろぼろになり、A問題から早解きも何もありませんでした。C問題はとにかくWAを出さないことだけを意識した。

終了後、hrbtさんと順位表を持ってきて枠を数える、50-60位あたりで滅茶苦茶枠数が減っていって顔が青白くなる。

何とか枠が足りていて(48/49)、本当に僕のICPCはギリギリだなぁと思いました。

2017 ICPC国内予選 参加記(Team:Maximum-omake)

2017/11/18 あまりに雑な文章だったので全面的に書き直しました。というよりメンバーがtwitter始めてたのでそれに合わせて改訂

はじめに

埼玉大学とかいう大学で競技プログラミングをしている人です。

Maximum-omakeとして2017 ICPC国内予選参加して全体54位・学内1位で国内予選突破となりました。 国内予選通過組の中で最下位だったので選抜されてよかったと思います。

メンバー

僕はMaximumとかいう闇のサークルに所属しているので、自然とメンバーもそこから選出された。この時は僕がサークル内トップだったので好きな部員を2人選んでいい感じだった。

@qcw君は大学のプログラミングの授業が面白すぎて競技プログラミングを始めた異色の経歴を持つ。同学年ということもあり仲が良かったので彼はほぼ固定枠だった。

@qcw君がサークルの同級生たちとあまり馴染めていなさそうだったので、最後の一人は後輩の@seica君を選出した。

ICPC

僕とqcw君の実験レポートのせいでチーム練習は模擬国内予選のみ。その結果も3完とあまりいい雰囲気ではなかった。

これを受けて本番の方針としては4完早解きか、5完で行こうと話してた気がする。

そもそもうちは競プロ専門サークルなのに国内予選突破できるような人間がうちのチームにしか固まっていない。下の方でひっかかればいいだけなのでいけるやろとか考えていた。

ということで話し合ってD問題を全員で考えて瞬殺する方針にした。

ICPC

Aは印刷が終わるまでに僕がプログラム書いて提出。AC。

Bはチラ見したらただのパースぽかったので他の二人に任せてCを考えることに。今思うと何でBを二人がかりで解いてるんですかねぇ

Cのソースコードを紙に書き終わると、何やら二人ともB問題で苦戦していた。

『B解けないとかカスかwww』みたいな暴言を吐いて、B問題を通す。(後にこの発言を後悔する)

ただこの時に事件があってIDENTICALINDENTICALとして1WA食らった。これが響いたら確実に戦犯なので手が震えた。

Dを全員で考察する。あとから見直したら、G問題が最大流を写経したら、ただノードの持ち方を工夫するだけで解ける問題だったので、僕はGを解くべきだった。

D問題が全然わからなくて紙上でたくさん考察しても解法が浮かばない。

seica君が終了20分前くらいに正解にたどり着く。僕らの実装力じゃバグ埋め込んだら一瞬でアウトなので見送る。

今ある全探索コードから枝刈を進めていけば二分探索(two minutesの方)ができると考えて、強引に枝刈した二分探索(two minutesの方)で通した。

最終的に4完(20315)で54th.

ICPC

G問題を見て血涙を流す。 僕がG問題を一切見ていなかったのはやっぱりチーム戦略の失敗だなぁと思った。

ワンチャンあるのでは、と思っていたらOBから「君たちギリギリ通ってなくて受けるwww」みたいなメールを頂戴してほげえええっとなります。

何だかんだがあって†C選抜†で予選突破を果たします。

感想

G問題を見ずにいたのはよくなかった。A-Dを解くって決め打ちはよくないなと思った。(大学生並みの感想)

最下位での予選通過でした。精進します。

後日談

予選突破を果たしたこともあってチーム内やらサークル内でイキってたんですが、他のメンバーが†覚醒†を果たし、チーム内で最下位になりサークル内最強の座も奪われてしまいました。

『D解けないとかカスかwww』

今では僕がARCでこういう風に煽られています。

強くなった(ている)筆頭のqcw君とseica君は来年も国内予選突破を果たすでしょうが、僕にかなりのフラストレーションをためているはずなのでチームには入れてもらえそうにありません。

人間、謙虚に物事を運ばなければ必ず痛い目を見るという平成・埼玉の小話でした。