สมมติว่าเรามีตัวเลข 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