yukicoder contest 247 writer感想

yukicoder contest 247のwriterのstoqです。初めての作問なので至らない点もあったと思いますが、全体的にいい感じにできた気がします。

 

コンテストリンク:

https://yukicoder.me/contests/262

yukicoder.me

 

注意したこと

・assertで制約外のテストケースがないか確認する。

・問題文のサンプルと実際のサンプルが一致しているかを確認する。

C++以外お断りコンテストにならないように実行時間に余裕を持たせる。

・コーナーケースがある場合は全て入れる。

・解説を省略しすぎない。

・難易度を低く見積もりすぎない。(低いよりは高い方がいいので)

 

問題ごとの講評

各問題についても色々書き留めておきます。

!注意!解法のネタバレを含みます。

 

A. Fruit Rush

tester: fukafukataniさん

First AC: Taprisちゃんさん

一問目なので簡単めにしました。ソートができるかどうかと A_i が全て負のコーナーケースに気付けるかが本質です。選ぶ果物の個数を0個以上にするか一瞬迷いましたが、無はミックスジュースではないのでやめました。

 

B. Zero (Novice)

tester: trineutronさん

First AC: uwiさん

ギャグ枠です。愚直を投げると、なんと!……通る(は?)

書いた後で愚直が通るのに気付きましたが、テストケース作っちゃったしまあいいかということで出題。ちなみに32bit整数の愚直は A = 2^{32}-1, B=2^{32} で落ちます。(trineutronさん指摘ありがとうございます)

 

C. Zero (Advanced)

tester: tran0826さん

First AC: heno_codeさん

ある連続する区間の数を何個か選んで足し合わせた数の取りうる値の範囲は、1つの連続した区間となります。これはよく出題される事実なので覚えましょう。

modはその都度取っても最後に一気に取っても変わらないので、区間M の倍数があればYes、そうでなければNoです。

 

D. Zero (Exhaust)

tester: tran0826さん

First AC: heno_codeさん

CとDの難易度差が大きい気がしたのでちょっと反省。

{\rm mod} \ P 上では割り算ができることを踏まえると、遷移の対称性が見えてきます。

DとEと統合して  P, \ K \leq 10^9 にするか迷いましたが、そうすると行列累乗なしで手計算またはWolframAlphaで解けてしまうのでやめました。

 

E. Zero (Maximum)

tester: tran0826さん

First AC: maspyさん

行列累乗の典型題があんまりない気がしたので作ってみました。verify用にどうぞ。

行列累乗やるだけなのでDより簡単だったかも?

あと問題名の括弧内は某大人気音楽ゲームの難易度から取っています。早く自粛から解放されて音ゲーしたい......

 

F. PQ Permutation

tester: kakiraちゃん

First AC: LayCurseさん(優勝おめでとうございます!)

場合分けが100個あるタイプの実装問です。基本知識は貪欲と累積和くらいしかないので、場合分けをしっかりできるかどうかが鍵となります。僕は最初嘘二分探索を書きました。

 最後の面倒な構成パート(解説の後半、(II)の最後)は、次図のように実装すると簡単に書けます。(  P=7, \ Q=3,\ m=5 の例)

 

f:id:null_mn:20200501084114j:plain

 

std::rotateは一番好きなstdです。

余談ですが、この問題は寝てるときに夢の中のARCで出題されていた問題です。起きて解いたらなんか良さげな感じだったのでパクって出題。夢の中のARC、すまん!w

 

追記:テストケースが滅茶苦茶弱かったみたいなのでリジャッジを行いました。お手数をおかけしました。テストケース作成って難しいですね……

難易度も一旦★3.5に下げたんですけどAC状況を見て★4に戻しました。

感想

参加してくださった皆さん、及びtesterの方々、ありがとうございました。

作問の楽しさに気付いてしまったのでまた出題したいですね。