Hướng dẫn giải của [200 đề thầy Đức] Bài 110: Giải phương trình


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Cần liệt kê các cặp nguyên (x, y) với |x|, |y| ≤ 10 thỏa mãn A·x + B·y = k, theo thứ tự x tăng dần.

Chỉ có 21 × 21 = 441 cặp cần thử nên vét cạn đã là cách nhanh nhất, chỉ viết 1 sub (lời giải đầy đủ). Đạt 21/21 test.

Sub 1: Thử mọi cặp (x, y) — ~O(21^2)~
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int T;
    cin >> T;
    while (T--) {
        int A, B, k;
        cin >> A >> B >> k;
        // Chi can thu x, y trong [-10, 10] (chi 21 x 21 = 441 cap): vet can la du nhanh
        vector<pair<int, int>> res;
        for (int x = -10; x <= 10; x++)
            for (int y = -10; y <= 10; y++)
                if (A * x + B * y == k) res.push_back({x, y});
        cout << res.size() << "\n";
        for (auto &p : res) cout << p.first << ' ' << p.second << "\n";
    }
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.