参考了大佬的代码
#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),没有使用额外的空间