A12 - Printer¶
- created: 2022-12-28 wed
- ご意見・ご要望はissue・プルリク用のGitHubまで
- 競技プログラミングのためのF#入門
- GitHub上の対応ディレクトリ
- 公式ページ
- 要点: アルゴリズム
入出力¶
1 2 3 | |
方針¶
二つ要点があります. 一つは何回目で実現できるかに関連して二分探索を思いつけるか, 二分探索を思いつけたとしてどう実装するかです.
ここでは後者の二分探索で何をどう調べるか考えましょう. あるm秒目で必要な枚数が印刷できたかどうかを調べる必要があります. 問題設定からその時間までに各i番目のプリンターはm/Ai枚印刷できています. あとはこの総和を取って必要枚数印刷できたか確認します.
解説¶
命令型の言語ではwhileで処理する方が多いように思います. ここでは再帰関数で処理します. 二分探索はアルゴリズムのどの本にも載っているため細かい解説は省略します.
1 2 3 4 5 6 7 8 | |
問題の制約で答えは 10^9 を超えないとあるため, 最大値(最初のr)はr = 10^9に取ればよいでしょう. もちろん1 \leq Aiの仮定からも保証されます.
途中の印刷枚数確認はArray.sumByでmi/aの和を積めば計算できます.