牛牛摘苹果

牛牛有一个苹果园。又到了一年一度的收获季,牛牛现在要去采摘苹果买给市场的摊贩们。 牛牛的果园里面有n棵苹果树,第i棵苹果树上有ai个果子。 牛牛为了保证果子的新鲜程度,每天都会去苹果树上采摘果子。

牛牛特意安排一个计划表: 计划m天去采摘果子。 对于第i天,它会去所有果树上轮流采摘bi个果子。 如果对于第i天,某棵果树上没有bi个果子,那么它只会把当前果树上的果子采摘完。 牛牛想知道它每天能供应多少个苹果给市场的摊贩们。

Solutions

sort

vector<int> solve(vector<int> nums, vector<int> requires) {
    sort(nums.begin(), nums.end());
    vector<int> res(requires.size());
    int used = 0, cur = 0, w = 0;
    for (int d = 0; d < requires.size(); d++) {
        int pick = 0;
        // accumulated apples after each day
        used += requires[d];
        // not enough apple
        while (cur < nums.size() && used >= nums[cur])
            pick += nums[cur++] - (used - requires[d]);
        // trees after has enough apples for the current day
        pick += (nums.size() - cur) * requires[d];
        if (pick == 0) break;
        res[w++] = pick;
    }
    return res;
}

int main() {
    for (auto n : solve({10, 10, 20}, {5, 7, 2}))
        cout << n << " ";
    cout << endl;
}

`

Last updated

Was this helpful?