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

รหัส C++ เช็คไฟทุกดวงว่าเปิดได้หรือไม่


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