ABC478 A - Grapes

ぶどう

考え方

入力は整数が $2$ つなので、int 型の変数を $2$ つ用意し、cin で入力を受け取る。

A問題としては少し難しいが、問題の通りにシミュレーションする。
0-indexed で考えると、以下のように配ることになる。

これをよく見ると、$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$ で割り、切り捨てることにより実現できる。