有三个正整数 \(a, b, c\) 。需要执行以下操作严格一次:
- 选择任意一个正整数 \(m\) 并让严格一个 \(a, b, c\) 之一乘以 \(m\) 。但不能改变他们的顺序。
回答是否可以经过一次操作后使 \(a, b, c\) 变为等差。
分类讨论题:
三种情况满足一种即可。(已知 \(a, b, c \geq 1\) )
- \(ma, b, c\) 等差
- 只需 \(ma - b = b - c\) 即 \(ma + c = 2b\) ,解 \(\frac{2b - c}{a} \geq 1\) 有整数解。
- \(a, mb, c\) 等差
- 只需 \(a + c = 2mb\) 即 \(m = \frac{a + c}{2b} \geq 1\) 有整数解。
- \(a, b, mc\) 等差
- 只需 \(a + mc = 2b\) 即 \(\frac{2b - a}{c} \geq 1\) 有整数解。
view
#include <bits/stdc++.h>
void solve() {
int a, b, c; std::cin >> a >> b >> c;
if ((2*b - c) % a == 0 && (2*b - c) / a >= 1) std::cout << "YES" << "\n";
else if ((a + c) % (2*b) == 0 && (a + c) / (2*b) >= 1) std::cout << "YES" << "\n";
else if ((2*b - a) % c == 0 && (2*b - a) / c >= 1) std::cout << "YES" << "\n";
else {
std::cout << "NO" << "\n";
}
}
signed main() {
int _ = 1; std::cin >> _;
while (_--) solve();
return 0;
}