---
# System prepended metadata

title: 1894. Find the Student that Will Replace the Chalk
tags: [C++, LeetCode]

---

# LeetCode 1894. Find the Student that Will Replace the Chalk

https://leetcode.com/problems/find-the-student-that-will-replace-the-chalk/description/

## 題目大意

有一個長度為 `n` 的整數陣列 `chalk` 以及 整數 `k`

現在總共有 `k` 支粉筆

學生共 `n` 人編號 `0`, `1`, ..., `n-1` ，老師會從 `0` 開始依序且循環地分派問題，對於編號 `i` 的同學，他每次解決問題需要消耗 `chalk[i]` 支粉筆

如果當前剩餘的粉筆數量嚴格小於 `chalk[i]` 則編號 `i` 的同學會被要求補充粉筆

請回傳編號幾號的同學會需要補充粉筆

## 思考

假設從 `0` 號同學到 `n-1` 號同學皆解決問題為一輪， `k` 支粉筆總共可以讓學生們用 `m` 輪
則我們只需要討論 `m` 輪過後剩餘的 `r` 支粉筆在輪到誰時不夠用了即可

問題顯然不難， $r\equiv k\mod{(\sum\limits_{i=0}^{n-1}chalk[i])}$

```cpp!
class Solution
{
public:
    int chalkReplacer(vector<int> &chalk, int k)
    {
        k %= accumulate(chalk.begin(), chalk.end(), 0L);

        if (k == 0)
            return 0;

        const int n = chalk.size();
        for (int i = 0; i < n; ++i)
        {
            k -= chalk[i];
            if (k < 0)
                return i;
        }

        throw;
    }
};
```