কম্পিউটার টিউটোরিয়াল

C++-এ বাক্স থেকে সর্বোচ্চ ক্যান্ডি সংগ্রহ (Maximum Candies You Can Get from Boxes)


ধরি nটি বাক্স আছে, প্রতিটি বাক্স [status, candies, keys, containedBoxes] ফরম্যাটে। status[i]=1 হলে খোলা, 0 হলে বন্ধ। candies[i]=ক্যান্ডির সংখ্যা। keys[i]=যে বাক্সগুলো খোলা যাবে তার ইন্ডেক্স। containedBoxes[i]=বাক্সের ভেতরে পাওয়া যাবে বাক্সগুলোর ইন্ডেক্স। initialBoxes অ্যারে থেকে শুরু করে ন্যূনতম ক্যান্ডি সংগ্রহ করতে হবে।

ইনপুট: status=[1,0,1,0], candies=[8,6,5,101], keys=[[],[],[1],[]], containedBoxes=[[1,2],[3],[],[]], initialBoxes=[0] → আউটপুট 19।

সমাধানের ধাপসমূহ

  • ans := 0, q := কিউ, visited, opened, hasKey := সেট

  • initialBoxes-এ থাকা বাক্সগুলো visited-এ যোগ করুন, খোলা থাকলে ক্যান্ডি যোগ করে q-তে ঢুকান

  • q খালি না হওয়া পর্যন্ত –

    • curr := q থেকে বের করুন

    • curr-র চাবিগুলো hasKey-এ যোগ করুন, ভিজিট করা বাক্স খোলা যায় তবে খুলুন

    • curr-র containedBoxes গুলো visited-এ যোগ করুন, চাবি বা খোলা থাকলে খুলুন

  • ans ফেরত দিন

বेहतर বোঝার জন্য নিচের কোডটি দেখুন –

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int maxCandies(vector<int>& st, vector<int>& cnt,    vector<vector<int>>& k, vector<vector<int>>& cb, vector<int>& ib) {       int ans = 0;       queue<int> q;       set<int> visited;       set<int> opened;       set<int> hasKey;       for (int i = 0; i < ib.size(); i++) {          int x = ib[i];          visited.insert(x);          if (st[x] == 1) {             ans += cnt[x];             opened.insert(x);             q.push(x);          }       }       while (!q.empty()) {          int curr = q.front();          q.pop();          for (int i = 0; i < k[curr].size(); i++) {             int x = k[curr][i];             hasKey.insert(x);             if (!opened.count(x) && visited.count(x)) {                ans += cnt[x];                q.push(x);                opened.insert(x);             }          }          for (int i = 0; i < cb[curr].size(); i++) {             int x = cb[curr][i];             visited.insert(x);             if (!opened.count(x) && (hasKey.count(x) || st[x] ==             1)) {                opened.insert(x);                ans += cnt[x];                q.push(x);             }          }       }       return ans;    } }; main(){    Solution ob;    vector<int> v = {1,0,1,0}, v1 = {8,6,5,101}, v2 = {0};    vector<vector<int>> v3 = {{},{},{1},{}}, v4 = {{1,2},{3},{0},{}};    cout << (ob.maxCandies(v, v1, v3, v4, v2)); }

ইনপুট

{1,0,1,0}, {8,6,5,101}, {{},{},{1},{}}, {{1,2},{3},{0},{}}, {0}

আউটপুট

19

  1. C++-এ N*N চেসবোর্ডে সর্বোচ্চ বিশপ বসানো

  2. C++-তে সেটে যোগ করা যাবে সর্বোচ্চ ডিফারেন্স এলিমেন্ট বের করা

  3. C++-এ নিচ থেকে ডানে আলো ফেরাতে সর্বোচ্চ মিরর গণনা

  4. মাইক্রোসফট এখন সরাসরি ডিজিটাল লাইসেন্স অফার করছে উইন্ডোজ ১১ হোম এবং প্রো-এর জন্য