(暂)CPS题解|202303-2垦田计划|5分

#include <bits/stdc++.h>
using namespace std;
int main() {
    //待开垦的区域总数、手上的资源数量、每块区域的最少开垦天数
    long long fieldNum, resourceNum, leastNeedDays;
    cin >> fieldNum >> resourceNum >> leastNeedDays;

    int needTimes[fieldNum], needResources[fieldNum];
    for (int i = 0; i < fieldNum; i++) {
        //输入田地耗时和每减少一天所需的资源数目
        cin >> needTimes[i] >> needResources[i];
    }
    //只要有资源
    while (resourceNum > 0) {
        //全部削减到 needTimes中的最小值
        int minTime = *min_element(needTimes, needTimes + fieldNum);
        for (int j = 0; j < fieldNum; j++) {
            if (needTimes[j] > minTime) {
                resourceNum -= needResources[j];
                if (resourceNum == 0) {
                    //减完之后没资源了,返回当前数组中最大值
                    needTimes[j] -= 1;
                    int result = *max_element(needTimes, needTimes + fieldNum);
                    cout << (result < leastNeedDays ? leastNeedDays : result) << endl;
                    return 0;
                } else if (resourceNum < 0) {
                    //减完之后负了,直接返回
                    int result = *max_element(needTimes, needTimes + fieldNum);
                    cout << (result < leastNeedDays ? leastNeedDays : result) << endl;
                    return 0;
                } else {
                    //减完之后有盈余,继续
                    needTimes[j] -= 1;
                }
            }
        }
        //如果整个数组的元素都一样
        if (*min_element(needTimes, needTimes + fieldNum) == *max_element(needTimes,needTimes + fieldNum)) {
            //从消耗最小的元素中减掉一天继续
            int minResource = needResources[0], tarK = 0;
            for (int k = 0; k < fieldNum; k++) {
                if (needResources[k] < minResource) {
                    minResource = needResources[k];
                    tarK = k;
                }
            }
            if (resourceNum - minResource >= 0) {
                resourceNum -= minResource;
                needTimes[tarK] -= 1;
            } else {
                int result = *max_element(needTimes, needTimes + fieldNum);
                cout << (result < leastNeedDays ? leastNeedDays : result) << endl;
                return 0;
            }
        }
    }
}

超时

有空优化一下

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务