题目描述
晨曦酒庄有 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;
}