コンテスト時間: 2024-08-03(土) 21:00 ~ 2024-08-03(土) 22:40 (100分)
A - Leap Year
Difficulty: 10
解答時間: 2:16
西暦 年 の日数 (閏年か否か) を求める問題。
問題文の通りに条件分岐するだけ。
- C++20 ~ には、
chrono::year
クラスに閏年かを判定するis_leap
関数があるらしい。 ABC365 関連か。
B - Second Best
Difficulty: 22
解答時間: 3:53
長さ の相異なる整数列 が与えられ、二番目に大きい要素が の何番目かを求める問題。
pair<int, int>
で、1番目に 、2番目に を格納して1番目で降順ソートすればよい。pair
型のソートを2番目で行う場合はsort
関数の3つ目の引数に比較関数を取る必要があることに注意。
C - Transportation Expenses
Difficulty: 269
解答時間: 5:20
あるイベントの参加者 人の各々の交通費は 円であった。ここで、交通費補助額として上限額 円を設定し、人 については 円を支給することにした。予算 (支給額の総和の上限) が 円であるとき、 の最大値を求めよ。ただし、 を無限に大きくできる場合は
infinite
と出力せよ。まず、 を無限に大きくできる条件は である。
- そうでない場合、求めるのは を満たす の最大値である。ある について条件を満たすか否かの判定は で出来るので、 の範囲で二分探索することで答えを効率よく求めることができる。
D - AtCoder Janken 3
Difficulty: 730
解答時間: 74:32
* 高橋君と青木君が 回のじゃんけんを行った。青木君が出した手は各文字がR
(グー)、P
(パー)、S
(チョキ) のいずれかである長さ の文字列 で表される。高橋君の出した手が「青木君に1回も負けなかった」「連続して同じ手を出さなかった」という2つの条件を満たすとき、高橋君が勝った回数としてあり得る最大値を求めよ。
- D問題の D は DP の D。
- を、「 回目に高橋君が手 を出したとき、 回目までに高橋君が条件を満たす手を出して青木君に勝った回数の最大値 」と定義する ( が
R
、 がP
、 がS
に対応) 。初めは全てのテーブルを で初期化しておく。 - 漸化式は以下のようになる (初期条件も含む) 。ただし、 は 0-indexed 。
- 最終的な答えは である。あとは上記の動的計画法を実装するだけ。
結果
Performance: 834
Rating: 631 → 653 (+22) Highest更新!
期末試験明け3週間ぶりの Rated 参加だったが、 Highest 更新できて嬉しい。