競プロでずっと作問していませんでしたが、ようやく問題を作り始めたので振り返りを書きます。
以下、想定解の解法についてはほぼ触れませんが、問題のネタバレを含みます(先に解いて欲しい気持ちはありますが、現在ほとんどジャッジがありません・・・ AOJ にすべての問題が移植されました!)
出題場所
JAG(FrontPage - ICPC OB/OG の会) にのみ問題を書きました。
- 国内予選(https://icpc2024.jag-icpc.org/icpcdomestic/contest/all_ja.html) : 2問(G, I)
- 夏合宿(https://jag-icpc.org/files/summer-camp-2024-day3-problemset.pdf): 5問 (C, D, E, J, K)
の全7問でした。
国内予選の問題
AOJ に移植されています
G 問題 数列の分割
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=3392
国内予選中盤以降の難易度の問題を作ろうと思って、まあ中盤くらいの難易度の問題が出来ました。
元々、各要素は正で、Lawler's K -Best Solutions のような top k 列挙アルゴリズムを出そうとしていましたが、非想定を落とせなかったので、問題設定も想定解法も変更されました(?)
I 問題 橋の建造計画 2
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=3394
国内予選の最終防衛問題を担当しました。かなり知識寄りですが、このタイプの知識は ICPC で出るのでセーフということで・・・
問題自体は何年か前に設定から解法を作っていました。国内予選という制約下での高難易度の問題がないということで「かなり知識寄りだけどそれでも良いなら」という感じで提案しました。 模擬国内中に通されるかはかなり怪しいと思っていましたが、某 guest チームは通すかもと思っていました(実際、解法自体は出ていて、実装時間の問題のようでした)。
ジャッジもついに公開されたので誰か解いてください。勉強にはなると思います。
夏合宿の問題
https://jag-icpc.org/files/summer-camp-2024-day3-problemset.pdf
2025年1月現在、どこにも移植されていません・・・
AOJ に移植されました!
以下、難易度順に書きます
Problem D: Paper Cut Game
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=3640
簡単枠を作ろうと思って、簡単ゲーム問題を作りました。実際、セット内で1番目か2番目に簡単だったようです。
高速に Grundy 数が計算出来て、紙の枚数を増やしても解けるんですが、「Grundy 数丸出しなのもなんだかな、簡単枠だし」と思って、1 枚の設定にしました。複数枚にした方がよかったのかな?
Grundy 数を計算する方針でなくても、実験してみればどっちの勝ちかの結果が見えて、住建にはこちら側の解法で解説されました。(Grundy数の計算はなんかごちゃごちゃしててややこしくしてね?と揶揄された、許すまじ)
Problem K: Equal or Not Equal
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=3647
これは大昔(5年前とか)に作問していた問題を引っ張りだしてきました。ちょうど真ん中あたりの難易度を想定して作っていました。
あまりクエリ問題は得意でないので、Yes, No, どっちも可能性ありうる っていう変わり種のクエリにすることで問題の新規性を主張・・・
現代だったらまあそこそこ解かれるだろうという想定での出題でしたが、WA, TLE が出て苦労していそうなチームもあり、予想よりも大変だったのかな、という印象でした。
Problem C: Commutativity
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=3639
このあたりから結構難しいです。実際、この問題が最後の崖になっていて、優勝を決める問題になっていました。2023年の夏合宿でも優勝を決める難易度の2乗制約数え上げを出したので、2年連続でおんなじ雰囲気の問題を出してしまったかも (2023夏合宿 Problem D: Many-hued Tree https://www.acmicpc.net/problem/30369) 。
問題自体は、順列のバージョンが線形時間想定解で 5 年前に pachicobue から提案されて yukicoder で tester して塩漬けしていました。 当時から一般の数列で解けるのかな?という話が出ていたんですが、夏合宿に出す前に真面目に考えて 2 乗で解けたのでパワーアップして出題。
考察自体は割と直線的ではありますが、乗り越えなければならない考察は多めで、結論として2乗で解けるのが面白いな~と思っています。 (JAGの内部コンテストで tester の hos さんに爆速で解かれて驚きましたが、流石にそこそこ難しいよなと思っていました。それは正しかったようです)
Problem E: Ball Passing
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=3641
みんな大好きパズル構築問題。シンプルな問題設定ですが、かなり難しいです。 トランプのゲームでこういうのがあったというのを思い出し、問題設定を考えて、解けたので出したというパターンです。
可能かどうか考える時点で難しい上に、それが分かって解けた!と思うと回数制限が本質的に難しいことに気付く、という形になっています。 実装も頭が混乱するタイプの問題なので、それも難易度を上昇させている要素だと思います。
コンテスト前日に、正当性の保証が出来ない乱択解法が見つかって対策を考えましたが、対策が出来そうもない感じ(おそらく正当性が証明できるのでは?)となったので、そのまま出しました。この解法だとかなり実装が軽くなるので色々怖かったです。
たくさん解かれることはないがどこかのチームが通してもおかしくないかなと思っていました。実際コンテストルームを巡回している際にこの問題に取り組んでいる人をそこそこ観測したので、頑張って!と思っていました。
競プロしていなくても分かる問題設定で、考察は面白いと思うので、ぜひ考えたり他の人に出題したりしてみてください。
Problem J: Draw the Tree
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=3646
最終防衛問題。すごく難しいです。 問題募集締切の1週間前に、問題が足りない(特に高難易度枠)という状況で、問題設定から考えました。
最初は可能性判定だけでしたが、それはわりかしすぐ解けてしまったので、幅を最適化させよう!という方向になりました。
まあ大体こんな感じで解けるし、詳細を詰めるのはしんどいけど頑張れば出来ます、と原案置き場に書いていましたが、もちろん頑張って詰めないと出題できません。 その結果、頭が壊れそうになりながら色々整理する羽目になりましたが、なんとか詳細を詰め切れたのでセーフ。
え、これ想定解とか誰が書くの?となりましたが、自分で書くしかありません。面倒なコーナーケースもちゃんと存在するので、ちゃんと対策しましょう。はい・・・。 テストケースも孤独に用意していたのですが、色々困った挙句、「制約小さくしても実装ほぼ変わらんし」ということで、制約も限界まで上げてみました(こういう高速化もあるよねと感じてもらうために・・・)。
一生懸命頑張って想定解とテストケースを作って tester を募集してみたものの、tester に名乗り出る人は一向に現れませんでした。 非常に困り果てたので、pachicobue をとっつかまえて tester をお願いしました(通すまで幽閉しました)。 一応解法の雰囲気は知っている状態でしたが、1日弱かかってました。このケース本当に想定解あってる?と言われて、ちゃんと図示して指摘する、などのやり取りが楽しい一日でした。
もちろん、コンテストで最難枠として出題しましたが、コンテストで誰か解いてくれないかな~とワクワクしていました。実際コンテストルームを巡回している際にこの問題に取り組んでいる人をチラホラ観測したので、(ものすごく)頑張って!と思っていました。(終了後、コンテスタントから、無理でしょ(意訳)というご指摘を受けました、涙)
頑張れば解けなくはないという感じなので、もしかしたら言われているよりも簡単かもしれません。ジャッジがどこかに生えたら解いてみてね。
おまけ(原案爆破)
ICPC yokohama regional で原案が1問爆破されました。
実は、Fと全く同じ問題を夏合宿で提案して棄却されていました……(問題の図を見てマジでビックリ)
— ホハム (@soiya_ksk) 2024年12月22日
この原案に対して、やや易という難易度評価をしていたのはご愛嬌、ということで・・・(実装してないからね!)
おわりに
2023 年は夏合宿の2問、2024年は模擬国内・夏合宿の7問ということで、1年で飛躍的進歩がみられました!
作問ネタが全然生えていないですが、2025年も頑張ろうと思います。ただ、いろんな人が JAG の問題を作ってくれそうな気がするので自分の出番はないかもしれません!