分SHAREツイートシェアはてブLINEPocket遅くなりましたが、9月7日(土)にABC140に参加したので、その振り返りと復習です。今回もPHP7での参加で通算7回目のコンテスト参加でした。Unhappiness最後に結果https://atcoder.jp/users/hideyuk1/history/share/abc140今回はDがAC出来ず。無念!レーティングもそこまで伸びませんでした。それでもCまで20分以内でAC出来ているのでその点は良かったですし、パフォーマンスも緑は維持出来ているのでまあ良しとしましょう。コンテスト参加回数も7回になってちょっと慣れてきてCまでのAC時間もそれなりに短くなってきました。提出したコード今回もA〜Dのみ。PHP_EOL;https://atcoder.jp/contests/abc140/submissions/7381926Nを3乗して終わり。PHP_EOL;https://atcoder.jp/contests/abc140/submissions/7386394ここまで約10分。配列の添字に気を付けつつ、追加で得る満足度を足します。PHP_EOL;https://atcoder.jp/contests/abc140/submissions/7389865ここまで20分弱。Aiの最大値がBiとBi-1の小さい方であることに気付けば、あとは足していくだけです。端っこ(iが0とn-1)の時用にNull合体演算子(??)を使ってますが、ちょっと可読性が低いような。UnhappinessLが連続するブロックとRが連続するブロックごとに分けて処理する方法で考えましたが、時間内にはAC出来ませんでした。あとで提出したコード解説を見てあとで提出し直したコードです。PHP_EOL;https://atcoder.jp/contests/abc140/submissions/7488258Lが連続するブロックとRが連続するブロックごとに順番に幸せな人の数を集計していきます。この時、奇数番目(0がスタート)のブロックについては、現れた回数がK回以下の場合は回転させたと考えて幸福な人の増加数を足していきます。数番目のブロックについては、奇数番目のブロックが現れた回数がK回以下の場合は直前のブロックの向きと同じになるので幸福な人の増加数は人数と同じ、奇数番目のブロックが現れた回数がK回を超える場合は幸福な人の増加数は人数−1になります。(ただし左端(0番目)のブロックの幸福な人の増加数は人数−1)あとで提出したコードその2奇数番目のブロックの回転処理をして、増加する幸福な人の数は2(右端のブロックだった場合は1)で幸福な人の最大値はN-1なので、もっとシンプルに書くことも出来ます。PHP_EOL;https://atcoder.jp/contests/abc140/submissions/7488322時間内にこの解法を思い付けるようになるイメージが湧かないですが、続けていたらいつか思い付けるようになるんだろうか。最後に今回はDをAC出来なかったので、次はACしたいですね。早くレーティング緑になりたいですが、この調子だと9月中になれるかどうかってところでしょうか。緑になったら言語をPHP7からもう少し競プロ向きの言語に変えようかなあ。コメントをキャンセルメールアドレスが公開されることはありません。コメント名前メールアドレスサイト上に表示された文字を入力してください。miniOrange。