题目描述
晨曦酒庄有 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;
}
该程序通过使用一个循环来处理多个测试用例,每个测试用例包含三个整数 n
、k
和 x
,表示酒桶的数量、选取的酒桶数量和葡萄酒的数量。首先,计算选取 k 个酒桶的容量和,如果超过了葡萄酒的数量,则无法装满;接着,计算未选取的酒桶的容量和,如果不足以装满剩余的葡萄酒,则也无法装满;否则,可以恰好装满。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END