「競プロのための算数」を気軽に放出したら、この問題の存在について指摘を受けた!
問題概要
個のボールを 人に配る。
全員が 個以上のボールをもらえるようにする。ボールが最も多い人と最も少ない人のボールの個数の差の最大値を求めよ。
制約
考えたこと
の場合は、そもそも 1 人しかいないので「最も多くもらえる人」も「最も少なくもらえる人」も一緒である。よって、個数の差は常に 個になる。
の場合で、最も差が大きくなるのは
- 人に、 個ずつ配り
- 最後の 1 人に、残り全部を配る
という場合である。残り全部とは 個である。よって、最も多い人と最も少ない人の差の最大値は
と求められる。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N, K; cin >> N >> K; if (K == 1) cout << 0 << endl; else cout << N - K << endl; }