ABC478 A - Grapes
ぶどう
考え方
入力は整数が $2$ つなので、int 型の変数を $2$ つ用意し、cin で入力を受け取る。
A問題としては少し難しいが、問題の通りにシミュレーションする。
0-indexed で考えると、以下のように配ることになる。
- $0$ 個目のぶどうは、人 $0$ に配る
- $1$ 個目のぶどうは、人 $1$ に配る
- $2$ 個目のぶどうは、人 $2$ に配る
- 中略
- $N-1$ 個目のぶどうは、人 $N-1$ に配る
- $N$ 個目のぶどうは、人 $0$ に配る
- $N+1$ 個目のぶどうは、人 $1$ に配る
- 中略
- $2N-1$ 個目のぶどうは、人 $N-1$ に配る
- $2N$ 個目のぶどうは、人 $0$ に配る
- $2N+1$ 個目のぶどうは、人 $1$ に配る
- 以下略
これをよく見ると、$i$ 個目のぶどうは $i$ を $N$ で割った余りの番号の人に配っていることがわかる。
よって、事前に長さ $N$ の vector を $0$ で用意しておいて、これをforループで書けばよい。
シミュレーションが終わったら、vector の中身を順番に出力しておしまい。
入力例1での動作
入力を受け取る。
n: 3
m: 5
長さ $n$ の vector をすべて $0$ で初期化する。
result: {0, 0, 0}
ぶどうを $0$ 個目から順番に配る。
$i=0$ では、人 $0$ に配るので result は {1, 0, 0} となる。
$i=1$ では、人 $1$ に配るので result は {1, 1, 0} となる。
$i=2$ では、人 $2$ に配るので result は {1, 1, 1} となる。
$i=3$ では、$3\bmod 3=0$ なので人 $0$ に配り、result は {2, 1, 1} となる。
$i=4$ では、$4\bmod 3=1$ なので人 $1$ に配り、result は {2, 2, 1} となる。
したがって、順番に $2,2,1$ を出力する。
注意点
特になし。
別解
数学得意な人向けの解法。
もらえるぶどうの個数は、だいたいみんな $M\div N$ 個。
あと $1$ 個もらえるかどうか、適切に切り上げや切り捨てを行えばよい。
これは、0-indexed で $i$ 人目は $M$ に $N-i-1$ を足して $N$ で割り、切り捨てることにより実現できる。