081 C - Boxes and Candies

解説

公式解説通りに素直に実装します. 競プロと言えどプログラミングである以上, 簡潔さと明確さを兼ね備えてほしいため, 条件分岐をどうすっきりまとめるかが焦点です. 特に今回はややこしい条件分岐はmaxでまとめられます. 私自身, 執筆時点でまだまだ不慣れな部分です.

さっと正解を書けたとしても, 他の人, 特にショートコードを書く人達のコードをいくつか眺めると勉強になります.

結論としては次のように書けばよいでしょう.

1
2
3
4
let solve N x Aa =
  ((0L,0L),Aa)
  ||> Array.fold (fun (acc,a0) a -> let c = max (a0+a-x) 0L in (acc+c, a-c))
  |> fst

総和がほしいタイプのループ処理だからfoldですっきり書けます.