出题人题解|分配水源
2024-11-25 03:55:28
发布于:浙江
31阅读
0回复
0点赞
题目大意
每次只允许使用指定的两个容器进行称量,能否精确测量出每个家庭所需的水量。(容器间转换产生的误差忽略不计)
题意分析
在该题的条件下,我们需要通过容量分别为 A 和 B 的两个容器通过不停的装水和倒水策略准确地测量出 C 的剂量。
解题思路
对于任意两个整数 和 ,他们的最大公约数 可以表示为 。
那么,如果我们想要用 和 表示一个整数 ,则 必须是 和 的最大公约数的倍数。
故能够准确测量出 C 的剂量取决于以下两点:
- C 必须小于等于 A+B,能测量的剂量最多等于两个容器容量之和
- C 必须是 A 和 B 的最大公约数的倍数
时间复杂度解析
的时间复杂度为 ,因此程序时间复杂度为
代码演示
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
void solve(){
LL a, b, c;
cin >> a >> b >> c;
LL gcd_ab = __gcd(a, b);
// a + b 可能会爆 int, 需要开 long long
if(a + b >= c && c % gcd_ab == 0){
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
int main(){
int n;
cin >> n;
while(n -- ) solve();
return 0;
}
这里空空如也
有帮助,赞一个