判断晨曦酒庄的酒桶能否恰好装满给定的葡萄酒

题目描述

晨曦酒庄有 n 个酒桶,容量分别是从 1 到 n(升),他可以从中任意挑选 k 个酒桶,并且每个酒桶必须恰好装满。

现在迪卢克准备了 x 升葡萄酒,判断能否用 k 个酒桶装满。

输入

第一行包含一个整数 t (1≤t≤10*4) 表示测试用例数量。

每个测试用例包含三个整数 n , k 和 x (1≤n≤2⋅10^5, 1≤k≤n, 1≤x≤4⋅10^10)

输出

每个测试用例输出一行YES或NO,如果恰好能用 k 个酒桶装满就输出YES,否则输出NO

实现代码

下面是一个简单的 C++ 代码示例,用于判断晨曦酒庄的酒桶能否恰好装满给定的葡萄酒:

#include <iostream>
using namespace std;

int main() {
    int t;
    cin >> t;

    while (t--) {
        int n, k;
        long long x;
        cin >> n >> k >> x;

        long long sum = (long long)k * (k + 1) / 2; // 计算选取 k 个酒桶的容量和
        if (sum > x) { // 如果容量和超过了葡萄酒的数量,无法装满
            cout << "NO" << endl;
            continue;
        }

        sum = (long long)n * (n + 1) / 2 - (long long)(n - k) * (n - k + 1) / 2; // 计算未选取的酒桶的容量和
        if (sum < x) { // 如果未选取的酒桶的容量和不足以装满剩余的葡萄酒,无法装满
            cout << "NO" << endl;
            continue;
        }

        cout << "YES" << endl; // 可以恰好装满
    }

    return 0;
}

该程序通过使用一个循环来处理多个测试用例,每个测试用例包含三个整数 nkx,表示酒桶的数量、选取的酒桶数量和葡萄酒的数量。首先,计算选取 k 个酒桶的容量和,如果超过了葡萄酒的数量,则无法装满;接着,计算未选取的酒桶的容量和,如果不足以装满剩余的葡萄酒,则也无法装满;否则,可以恰好装满。

© 版权声明
THE END
喜欢就支持一下吧
点赞14赞赏 分享