見出し画像

ABC207の感想

AtCoder Beginner Contest 207に参加しましたのでその感想を書いていきます。問題はこちらから。

結果はこんな感じでした。

キャプチャ

キャプチャ1

ABC(45:40+0WA)
順位 2501 / 8401
パフォーマンス 949

3完でした。しかし、D以降はとっても難しいようでしたのでこんなもんでしょう。今回はDを飛ばして、Eを考えてました。解けませんでしたが、あと一歩のところまで迫りまることができました。でも、その一歩が遠いのかもしれません。また、C問題でさえ(さえっていうの失礼かもしれません)結構難しかったです。なかなかにスリリングな回でした。でも、これはこれで楽しめたので問題なしです。

感想いきます。

A問題

3つの数字から2つ選んでその最大値を出力します。この問題で一番苦戦したのは、VisualStudioが故障したことです。もうね、本当に焦りました。

急いで、VisualStudioの新しいプロジェクトを作りました。が、いつもは競プロで

#include <bits/stdc++.h>

を読み込んでいるのですが、これは自作しないといけないので、デフォルトでは入っていません。さらに焦ります。

結局おとなしくコードテストを使いました。オンラインの環境が整っているの素晴らしいですね。助かりました。

問題自体はなんかちょちょいとやりました。

B問題

この問題はまず理解するのに5分ぐらいかかりました。入力の値が4つもあるのでとても難しかったです。

結局、色々考えた結果1回ずつシミュレートしていこうという結論になり、for文を回しました。でも、どこまで回せばいいのかの検討が付きませんでした。

B問題なんだからO(1)ってことはないだろう、というとんでもない考察をした結果よくわかりませんが、1e7まで回しました。結局これでACです。ホッとしました。

コンテスト後にTwitterで同様の議論がありまして、どうやら1e5が最大のようです。よかったよかった。

C問題

この問題はとても難しかったです。まず、嘘解法に走ります。

開区間と閉区間がありますので、Lが開区間なら+1、Rが開区間なら-1としました。制約をみるに、O(N^2)で間に合うことはわかっていたので、上記の値を用いて判定を行いました。2つの区間の大小はわからなかったので、そこを場合分けして書きました。

とすると、サンプル2は通るのに、サンプル1がダメでした。ここから迷走を始めます。

まず、ダメな例として、両方とも開区間でR=L+1の場合には、すごいことになります。L=3,R=4なら上記の計算後L=4,R=3となりますね。よくわかりません。なにを思ったかこれを不適な例とみなしてしまい。L=2e9,R=-2e9として、計算を進めました。

でも、サンプルをもう一度眺めてみると、(3,4)って不適でもなんでもないなあ、ということに気づきました。でもどうやってやるんだろう。

次に思ったのが、開区間の表現を0.5とする方法です。今思えばこの方法で十分ACできますね。ただ、コンテスト中は区間の端で一致する場合に浮動小数点誤差で=が取れないなあ、と悩んでしました。このあたりで、40分ぐらい経っていましたね、焦る焦る。

ここで、上の考えをちょっと派生させて、各値を*2して開区間を-1と表現することを思いつきました。これ我ながら天才だと思いました。それと同時に、C問題難しくないですかね?と思わされました。

結局この方法で無事ACです。難しいですね。

でも、WAを出さなかったのは褒めてもいいと思います。よく最後まで詰め切りました。

D問題

ちらっと見ました。Eの方が解かれていたのと、なんか苦手そうな波動を感じたのでEに行きました。

E問題

この問題の解法は一瞬で浮かびました。なんか似たような問題を何問か解いたことがあります。ただ、一つ不安なのが計算量です。

dpで、j番目を見ているときに、直前の区間端がk番目で、i個目のグループの時、の組み合わせ数

を管理すれば解けるのですが、これの計算量はO(N^3)です。ドキドキしながら、また添え字をバグらせながら実装を進めていきました。

サンプル1だけどうしても会わなくて15分ほど格闘していましたが、残り時間10分ほどで何とかプログラムは完成。

O(N^3)ですが、定数倍は軽いので、そのあたりがうまいことなんとかしてくれないかな、と淡い期待を抱きながら提出。TLEです。まあ、そうですよね。甘くないか。

結局残りの10分も諦めずに高速化できないかもがいてましたが何も浮かばず、時間切れです。悔しいです。でも、よく食らいつきました。

F問題

みてないです

あとがき

今回は全体的に難しかったと思います。結果として、早解き勝負になってしまいレートは落ちてしまってます。でも、自分の実力よりもちょっと(かなりかもしれません)上の問題でもがくのはとっても面白いです。解けないと悔しいのはもちろんそうなのですが、時間が迫り焦る中、絶対倒してやると燃える感じ。大好きです。この瞬間が競プロで一番好きかもしれないです。

次回は解いてみせます!と毎回言っている気がしますが、まあそのうち解けるでしょう。解けるといいなあ。まったりと精進します。のんびりいきましょう。

この記事が気に入ったらサポートをしてみませんか?