题解 | #编程题1# 数学

编程题1

https://www.nowcoder.com/practice/ff518f3162c849b9a84d1fab8e7179be

参考了大佬的代码

#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),没有使用额外的空间

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务