[模拟] aw3626. 三元一次方程(模拟+暴力+aw周赛002_1)

Posted Ypuyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[模拟] aw3626. 三元一次方程(模拟+暴力+aw周赛002_1)相关的知识,希望对你有一定的参考价值。

1. 题目来源

链接:3626. 三元一次方程

2. 题目解析

签到题。

直接暴力即可,枚举 xy,判断 n-3x-5y 是否大于 0 且能被 7 整除即可。

其中 x 从小到大枚举,且 y 也是从小到大枚举,所以保证了答案的字典序输出。


时间复杂度: O ( n 2 ) O(n^2) O(n2)

空间复杂度: O ( 1 ) O(1) O(1)


正常写法:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int n;

bool work() {
    for (int x = 0; x * 3 <= n; x ++ )
        for (int y = 0; y * 5 + x * 3 <= n; y ++ )
            if ((n - x * 3 - y * 5) % 7 == 0) {
                cout << x << ' ' << y << ' ' << (n - x * 3 - y * 5) / 7 << endl;
                return true;
            }

    return false;
}

int main() {
    int T;
    cin >> T;
    while (T -- ) {
        cin >> n;

        if (!work()) puts("-1");
    }
    return 0;
}

丑陋无脑写法:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main() {
    int T;
    cin >> T;
    
    while (T -- ) {
        int n;
        cin >> n;
        
        int flag = false;
        for (int x = 0; x <= n; x ++ ) {
            for (int y = 0; y <= n; y ++ ) {
                for (int z = 0; z <= n; z ++ ) 
                    if (3 * x + 5 * y + 7 * z == n) {
                        cout << x << ' ' << y << ' ' << z << endl;
                        flag = true;
                        break;
                    }
                    if (flag) break;
            }
            if (flag) break;
        }
        if (!flag) cout << -1 << endl;
    }
    return 0;
}

以上是关于[模拟] aw3626. 三元一次方程(模拟+暴力+aw周赛002_1)的主要内容,如果未能解决你的问题,请参考以下文章

[构造] aw3764. 三元数异或(贪心+模拟)

Acwing第 2 场周赛605 题解

第 2 场周赛

Vicious Keyboard CodeForces - 801A (暴力+模拟)

[构造] aw3732. 矩阵复原(模拟+构造)

模拟三元操作符和真正三元操作符的区别