Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โค้ด C++ ตรวจสอบเปิดหลอดไฟทั้งหมดได้หรือไม่

สมมติว่าเรามีตัวเลข m และรายการซ้อน A ที่มี n รายการย่อย มีหลอดไฟ m ดวง เริ่มต้นปิดทั้งหมด มีปุ่ม n ปุ่ม แต่ละปุ่มเชื่อมต่อกับชุดหลอดไฟ A[i] คือชุดหลอดที่เปิดได้โดยกดปุ่ม i ตรวจสอบว่าสามารถเปิดหลอดทั้งหมดได้หรือไม่

เช่น ถ้าอินพุตคือ A = [[1, 4], [1, 3, 1], [2]]; m = 4 เอาต์พุตจะเป็น True เพราะกดทุกปุ่มเปิดหลอดทั้ง 4 ดวงได้

ขั้นตอนการแก้ปัญหา

กำหนดเซต s
for i := 0 ถึง size of A - 1:
    for j := 0 ถึง size of A[i] - 1:
        ใส่ A[i, j] ลง s
if ขนาดของ s == m:
    return true
otherwise:
    return false

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

bool solve(vector<vector<int>> A, int m) {
    set<int> s;
    for (int i = 0; i < A.size(); i++) {
        for (int j = 0; j < A[i].size(); j++) {
            s.insert(A[i][j]);
        }
    }
    if (s.size() == m)
        return true;
    else
        return false;
}

int main() {
    vector<vector<int>> A = { { 1, 4 }, { 1, 3, 1 }, { 2 } };
    int m = 4;
    cout << solve(A, m) << endl;
}

อินพุต

{ { 1, 4 }, { 1, 3, 1 }, { 2 } }, 4

เอาต์พุต

1