参考了大佬的代码
#include <iostream>
using namespace std;
int main() {
long long t;
while (cin >> t) {
long long n, k, d1, d2;
while (cin >> n >> k >> d1 >> d2) {
long long a, b, c; // 三只球队的分数
// n不是3的倍数,则无论如何都不能平分
if (n % 3 != 0) {
cout << "no" << endl;
continue;
}
bool flag = false;
for (int i = -1; i <= 1; i += 2) {
for (int j = -1; j <= 1; j += 2) {
b = (k + d1 * i + d2 * j) / 3;
a = b - d1 * i;
c = b - d2 * j;
// 不满足题意,跳过
if (a < 0 || b < 0 || c < 0 || a + b + c != k
|| a > n / 3 || b > n / 3 || c > n / 3) {
continue;
}
cout << "yes" << endl;
flag = true;
break;
}
if (flag) {
break;
}
}
if (!flag) {
cout << "no" << endl;
}
}
}
return 0;
}
时间复杂度:O(1),循环较小,可视为常数级
空间复杂度:O(1),没有使用额外的空间

京公网安备 11010502036488号