milkcoffeeのブログ

競技プログラミングなど

【コンテスト開催記】milkcoffee Penalty Contest 001【MojaCoder】

MojaCoderでコンテストを開催しました!

 こんにちは、milkcoffeeです。

MojaCoderでコンテストを開催しました。(2回目)

mojacoder.app

全4問、うち1問はrianoさんから案をいただきました(ありがとうございます!)

今回のコンテストの総提出者は約50人!多い!本当にありがたいです!

コンテスト時間が30時間、ペナ時間が30時間と特殊なタイプのコンテストでした。

コンテストを開いてみての感想&各問題についてお話をしようと思います。

各問題の詳しい解説はMojaCoderの問題ページをご覧ください!

 コンテスト開催にあたって

「引っ掛け問題を作りたい」

何故そう思ったか。前回コンテストを開催してみて、自分の作った問題でペナが出ていることに”快感”を覚えてしまったからです。

そしてペナが出まくるコンテストを作りたい、1ペナの時間をめっちゃ多くしたらもっと楽しいんじゃないか、そう思ってこのコンテストが生まれました。

普通のコンテストと違うのは、あらかじめ「ペナを誘発させる問題を用意していますよ」という主催側からの宣戦布告があることです。

参加者が身構えることを前提として、こちらも予想を超える引っ掛けを作らないといけません。なので、どの問題でも「2つ以上の引っ掛け要素」を意識して作りました。

#1:「Under M」(100点)

(リンク)Under M | MojaCoder

FA:enthrmさん(3:07)

正解者数:41人

ペナ数:31

最初の問題ですが、ちょっと汚いやり方でペナを取りに行きました。N^Nの下M桁を求める問題です。余りを使って求めたくなるところですが、下M桁が「00...」みたいになる場合があるので、単純に余りで答えを出そうとするとWAです。かといって余った桁を0で埋めればいいわけでもなくて、場合分けが必要になります。

注意をすれば大丈夫とはいえ、数分でACしてる人がいるので驚きです。凄すぎます。

個人的には面白くはない()問題だと思ってますが、ペナコンの1問目っぽい感じはしますね。

#2:「RGB walking」(200点)

(リンク)RGB walking | MojaCoder

FA:googol_S0さん(16:57)

正解者数:31人

ペナ数:20

f:id:milkcoffeen:20210602151856p:plain

個人的にはお気に入りの問題です。グリッド問題は楽しいですね。

問題設定を考えた時はコーナーケースのことは考慮してなかったんですが、考えてみたら良い感じになったので、ペナコンに持ってきました。

発想としては「グリッドがめっちゃ広ければYesになりそうだな」が起点となって、あとはHとWが小さいときにどうなるか、を丁寧に考えていくと良いです。

初めは問題文の最後が「milkcoffee 君が(H,W)で塗ることはできますか?」だったんですが、コーナーケース(「1 1」の場合)を作りたくてに変更しました。実際「1 1」で引っかかってる方がかなり多かったです(こういうのを見るのが楽しいですね)。

#3:「Slice Cube」(300点)

(リンク)Slice Cube | MojaCoder

FA:kaikeyさん(44:38)

正解者数:17人

ペナ数:36

f:id:milkcoffeen:20210602161417p:plain

図らずも今回のコンテストの最少ACになってしまいました。ペナコンなので端から虐殺するつもりはあったんですが、#4より正解者が少ないのは意外でした。

コードはシンプルになりますが、やはり考察は重いですね。想定緑Diffとか言ってましたが全然そんなことなさそうです。

解法はひたすら場合分けです。幻の点Sをもう1つの辺上に考えて、それがどこに来るかを考えるとある程度は場合分けできます。それでもコーナーケースはあって、testcase-10の「11 11 4 8」で落ちてる人が多かった気がします。

立体のイメージが掴めないとかなり解きにくい問題だったと思います。自分はキッチンの汚れ取る四角い白いスポンジみたいなやつ(?)を切って考えたりしました。

参加者によって間違っている部分がかなり違っていて、その分惜しい人も多かったですね。2問連続場合分け問題ですみません。

 

#4:「Sqrt Equality」(400点)

(リンク)Sqrt Equality | MojaCoder

FA:emthrmさん(15:07)

正解者数:21人

ペナ数:53

この問題の案&解法案はrianoさんからいただきました。テストケース作成も手伝っていただきました。ありがとうございます!

シンプルですがかなり多くの引っ掛け要素が詰まっていて、すごくいやらしい問題だったと思います。予想通り、大虐殺をかましてくれました。また、例の有名な問題にすごく似ているのですが、想定解は全く違うというのも面白いですね。

想定解ではA~Dを最小公倍数で割るとうまくいくんですが、0が入っている場合に気を付ける必要があります。

ちなみにPythonみたいなオーバーフローの無い言語だと式変形のみでいけるみたいなんですが、それでも正負の場合分けがあったりでペナからは逃げられないみたいです!

sqrt関数でごり押してACされてる方もいましたが、それもまた一興。

総評

1位:Nachiaさん

2位:emthrmさん

3位:toyyyyoさん

おめでとうございます!!!

f:id:milkcoffeen:20210611000821p:plain

総提出者数:48人

総ペナ数:140

全完ノーペナが3人も出ると思ってなかったのでビックリしました!流石です!

(1位でも2~3ペナすると思ってました)

ペナを30時間にすると順位表がカオスになることが分かりました。

思いついたときは逆転要素があって良いと思ってましたが、逆にペナルティを食らったらめちゃくちゃ萎える気もします。そう考えると一長一短ですが、お祭り気分でやるには丁度いいですし、何より主催して順位表を眺めるのは楽しいです。

自作問題については、ちょっと場合分けに偏ってしまった感じがあるので、問題設定から自然にペナを誘発させられるような問題を考えたいです。それが思いついたらペナコン002やります!

これから

今回はペナルティコンテストを開催しましたが、まだ色んなコンテストを開いてみたいなと思ってます。具体的にはこんな感じで考えてます。

・ゲームコン(ゲーム問題のみ)

・1行問題コン

・Nコン(入力がNのみ)

素数コン(素数・約数問題のみ)

・グラフコン(グラフ問題のみ)

・○○[アルゴリズム名]コン(解法のキーワードが与えられる)

普通の真面目なコンテストも開きたいと思ってます。

一緒にコンテスト開催をしてくれる方、問題案があってもなくても良いのでDMやリプライしてくれると嬉しいです!

 

コンテスト開催記は以上になります。

ありがとうございました!