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

C++ প্রোগ্রাম: গ্রিডে ক্লিনিং রোবট দ্ারা পরিমার্জনযোগ্য সর্বোচ্চ সেল সংখ্যা বের করা


ধরি, আমরা একটি ক্লিনিং রোবট তৈরি করছি যা একটি গ্রিডে কাজ করে। গ্রিডটির মাত্রা h x w। m সংখ্যক ময়লা সেল আছে যা পরিমার্জন করতে হবে, সেগুলো 'dirt' নামক একটি ইন্টিজার পেয়ারের অ্যারেতে দেওয়া আছে। ক্লিনিং রোবট যদি কোনো নির্দিষ্ট সেলে রাখা হয়, তবে সেটি সেই সারিটি এবং কলামটির সব সেল পরিমার্জন করতে পারে। তাহলে আমাদের কাজ হল সর্বোচ্চ সংখ্যক ময়লা সেল পরিমার্জন করা। সেটির গণনা করে আউটপুট হিসেবে দেখাতে হবে।

উদাহরণস্বরূপ, ইনপুট h = 3, w = 3, m = 3, dirt = {{0, 0}, {1, 1}, {2, 1}} হলে আউটপুট হবে ৩। যদি ক্লিনিং রোবটকে {1, 0} সেলে রাখা হয়, তবে সেটি গ্রিডের সব ময়লা সেল পরিমার্জন করতে পারবে।

সমাধানের পদ্ধতি

একটি map ডিফাইন করুন
১০০ আকারের দুটি অ্যারে hcount এবং wcount ডিফাইন করুন এবং ০ দিয়ে ইনিশিয়ালাইজ করুন
maxh = 0, maxw = 0, res = 0
দুটি অ্যারে p, q ডিফাইন করুন
i = 0 থেকে m-1 পর্যন্ত:
    a := dirt[i]-এর প্রথম মান
    b := dirt[i]-এর দ্বিতীয় মান
    pairMap[pair (a, b)] := 1
    (hcount[a] ১ বাড়ান)
    (wcount[b] ১ বাড়ান)
i = 0 থেকে h-1 পর্যন্ত:
    maxh := maxh এবং hcount[i]-এর মধ্যে সর্বোচ্চ
i = 0 থেকে w-1 পর্যন্ত:
    maxw := maxw এবং wcount[i]-এর মধ্যে সর্বোচ্চ
i = 0 থেকে h-1 পর্যন্ত:
    if hcount[i] == maxh, তবে:
        p-তে i যোগ করুন
i = 0 থেকে w-1 পর্যন্ত:
    if wcount[i] == maxw, তবে:
        q-তে i যোগ করুন
p-র প্রতিটি এলিমেন্ট i-এর জন্য:
    q-র প্রতিটি এলিমেন্ট j-এর জন্য:
        if pairMap[pair (i, j)] নন-জিরো, তবে:
            res := maxh + maxw - 1
        অন্যথায়:
            res := maxh + maxw
            return res
return res

উদাহরণ

#include <bits/stdc++.h> using namespace std; const int INF = 1e9; int solve(int h, int w, int m, vector<pair<int, int>> dirt){    map<pair<int, int>, int> pairMap;    int hcount[100] = {0}, wcount[100] = {0}, maxh = 0, maxw = 0, res = 0;    vector<int>p, q;    for (int i = 0; i < m; i++) {       int a = dirt[i].first;       int b = dirt[i].second;       pairMap[make_pair(a, b)] = 1;       hcount[a]++;       wcount[b]++;    }    for (int i = 0; i < h; i++)       maxh = max(maxh, hcount[i]);    for (int i = 0; i < w; i++)       maxw = max(maxw, wcount[i]);    for (int i = 0; i < h; i++){       if (hcount[i] == maxh)          p.push_back(i);    }    for (int i = 0; i < w; i++) {       if (wcount[i] == maxw)          q.push_back(i);    }    for (auto i : p) {       for (auto j : q) {          if (pairMap[make_pair(i, j)])             res = maxh + maxw - 1;          else {             res = maxh + maxw;             return res;          }       }    }    return res; } int main() {    int h = 3, w = 3, m = 3;    vector<pair<int, int>> dirt = {{0, 0}, {1, 1}, {2, 1}};    cout<< solve(h, w, m, dirt);    return 0; }

ইনপুট

3, 3, 3, {{0, 0}, {1, 1}, {2, 1}}

আউটপুট

3

  1. C++ প্রোগ্রাম: গ্রিডে আলোকিত কক্ষের সংখ্যা গণনা

  2. C++ প্রোগ্রাম: গ্রাফে ব্রিজ এজের সংখ্যা নির্ণয়

  3. C++ প্রোগ্রাম: গ্রাফ থেকে এজ মুছে স্কোর সর্বনিম্ন করায় সর্বোচ্চ কমতি

  4. C++ প্রোগ্রাম: গ্রিডে একক পথ তৈরির জন্য ব্লক করতে হলে কক্ষের সংখ্যা