コンテストURL: https://yukicoder.me/contests/418
yukicoderで3度目のコンテスト開催です。これまでも誘導問題を何度か出題してきましたが、誘導が分かりにくいせいもありあまり誘導に乗ってくれる参加者がそこまで多くなく空回りしていた印象です。そこで今回は実験的に、誘導問題であることが明確になるように制約違いの問題として誘導問題を出題することにしました。
ただし制約違いの問題を出すならば問題数を普段より多めにしないと参加者が不満を感じるかもしれないとtesterさんにご助言いただき、せっかくならばと10問の大台に挑戦してみました。問題量に楽しんでいただけていたら幸いです。参加者の皆様とtesterの皆様にこの場を借りてお礼申し上げます。
A: No.2184 A○B問題 ★ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2184 tester:koboshiさん | ||
置換は順列とみなせるので自然と配列を用いて実装をすると思いますが、そうすると配列の合成を書くことになります。合成順や$0$-indexdedと$1$-indexedのズレをきちんと理解しているかを問うために出題しました。合成の定義を読み飛ばした人が多かったようで、合成順のミスがかなり目立ち非可換なテストケースでの撃墜が大量に出たようです。 またこの問題を通して、数列に慣れていない人も数列が写像であることを認識しやすくなると期待しています。 |
B: No.2185 平方数の下6桁 ★☆ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2185 tester:遭難者さん | ||
G問題の制約違いとなる誘導問題です。この問題自体は全探索などで簡単に解けますが、解けた後は提出コードを使って出力を観察したり、コンテスト後なら解説に従ってテストケース内の境界ケースを参考にしたりすることで、規則性を見出しG問題へのヒントを得ることができます。 |
C: No.2186 冪乗の片側極限 ★☆ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2186 tester:遭難者さん | ||
定義に従って考察できるか否かを問うために出題しました。極限と代入が違うものであるということ自体は聞いたことがある人が多かったと思いますが、実際に提出してみて1つだけWAが出たりすれば自ずと境界ケースに気づきやすく、そこからは自力で代入ではなく定義に基づいた値の評価ができると期待しています。 |
D: No.2187 三立法和 mod 333 ★★ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2187 tester:testestestさん | ||
数学は厳密に解けさえすればエレガントな方法でも愚直な方法でも何でもいいので、TLEに困ったら埋め込みを検討してしまいます。そんな時、そういえば埋め込みが想定の問題は見たことがないなと思い出題しました。 1つの問題を愚直に解く時間が制約内の全問題を愚直に解く時間とほとんど一致する問題にすることで全問題を解くという選択肢を思い浮かびやすくし、そこから埋め込みに気付いてくれることを期待しました。 |
E: No.2188 整数列コイントスゲーム ★★ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2188 tester:遭難者さん | ||
$p$進の重要な定理であるMahlerの定理を題材にした問題です。本問のように結果的に$p$進を使わないような問題にも適用できるので、そのことを解説で説明したいがために出題しました。 想定解は$p$進の知識を用いず実験で規則性を見つける解法ですが、実験的に解いた場合は想定解を解説も読んで背景を学んでくれるかな、と期待して丁寧に証明をつけました。結果的に解説は★2よりかなり難易度が高いと思いますが、あくまで難易度は解くための難易度(実験で規則性を見出す考察難易度と実装難易度)としてつけていますのでご容赦ください。 とはいえ最初は解説の難しさに引きづられてもっと高めに難易度をつけてしまっていたのですが、testerさんに実験的な解き方はむしろ典型であり競技プログラマーの得意とするところであると教えていただき適正な難易度に設定することができました。 |
F: No.2189 六平方和 ★★☆ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2189 tester:testestestさん | ||
四平方定理と四元数を題材にした問題です。ディオファントス方程式は変数を増やすことで逆に難易度が下がることがあるのですが、本問も四平方定理や四元数自体は知らなくても$6$変数あるおかげで様々な解法が可能になっています。しかも当初想定していた解法よりずっと賢い解法をtesterさんが教えてくれたため、こちらも勉強になりました。 こういう「正解するためには知識は不要でも、何故それで正解となったかや何故こういう問題が成立するかが知りたくて解説を見に来た人に背景知識を詳細に共有する」という形の作問も教育的かなと思い色々模索中です。 |
G: No.2190 平方数の下12桁 ★★★ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2190 tester:遭難者さん | ||
B問題を誘導問題に持つ問題であり、かつH問題とI問題の誘導問題となる問題です。B問題と違って全探索では解けないので、B問題で提出したコードを使って規則性を見出す必要があります。 また規則性の背景が分からなくてもこの問題を解けば解説が読めるので、そこから平方剰余や$p$進を用いた解法を学ぶことができます。その知識を使えば、適宜検索をすることでH問題やI問題の解き方も分かるだろうと期待しています。 |
H: No.2191 一元二次式 mod 奇素数 ★★★ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2191 tester:MasKoaTSさん | ||
平方剰余の理解を問う問題です。平方剰余自体を知らなくても、G問題までを順当に解いていればG問題の解説を読むことで平方剰余の手がかりを得ることができます。 直接的な平方完成を用いたwriter解は競技プログラミングだと非典型だったようで、より競技プログラマーが自然と思いつきやすい解法をtesterさんに紹介してもらえました。 |
I: No.2192 平方数の下14桁 ★★★☆ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2192 tester:遭難者さん | ||
G問題とH問題を誘導問題に持つ、平方剰余の相互法則の実践問題です。平方剰余自体を知らなくてもG問題をB問題からの誘導に従って解けば解法を読むことで平方剰余に触れることができ、そこから検索しつつH問題を解くことで平方剰余の理解を深めながら平方剰余の相互法則を学ぶことができ、その理解をきちんと実装に乗せることで本問を解くことができます。 知識を直接問う問題はなかなかコンテストに出しにくいところですが、このように誘導問題と解説を組み合わせて段階的に学んでもらえば知識を直接問うことができるかもしれないと思い出題しました。ただ問題数も非常に多くなってしまったので、最初から平方剰余について熟知している人以外にはコンテスト中に本問を解き切れなかったようです。参加者にもっと満足感を与えられるコンテスト作りに励みます。 |
J: No.2193 メガの下1桁 ★★★★ | ||
---|---|---|
問題リンク:https://yukicoder.me/problems/no/2193 tester:Kazunさん、shino16さん | ||
巨大数とプログラミングは相性が良いので競技プログラミングでも巨大数に関係する問題を出題してみようかなと思い作問した問題です。類題のTetration Modを理解していれば十分解けますが、一方でライブラリを貼るだけで終わりではないので逆にTetration Modやそれに類する議論(カーマイケルの定理など)の理解が必要でもある問題です。 ちなみにこの問題はyukicoderで最初に作問した2問の残る1問で、とても思い入れがあります。もう1問はyukicoder contest 367のF問題「黄金比で擬似乱数生成」でした。 |