Codeforces Round 764 (Div. 3) B. Make AP

发布时间 2023-09-15 18:49:52作者: zsxuan

有三个正整数 \(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;
}