สมมติว่าเรามีตัวเลข m และรายการที่ซ้อนกัน A กับ n รายการย่อย พิจารณาว่ามีหลอดไฟ m,ในขั้นต้นทั้งหมดจะถูกปิด มีปุ่ม n ปุ่มและแต่ละปุ่มเชื่อมต่อกับหลอดไฟบางชุด ดังนั้น A[i] คือชุดของหลอดไฟที่สามารถเปิดได้โดยการกดสวิตช์ ith เราต้องตรวจสอบก่อนว่าเราจะจุดไฟทั้งหมดได้หรือไม่
ดังนั้น หากอินพุตเป็น A =[[1, 4], [1, 3, 1], [2]]; m =4 เอาต์พุตจะเป็น True เพราะเมื่อกดสวิตช์ทั้งหมด เราจะเปิดหลอดไฟทั้งสี่ดวงได้
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
Define one set s for initialize i := 0, when i < size of A, update (increase i by 1), do: for initialize j := 0, when j < size of A[i], update (increase j by 1), do: insert A[i, j] into s if size of s is same as m, then: 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