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

বম বLAST করিয়ে সর্বোচ্চ শত্রু ধ্বংস C++-এ

একটি ২D ম্যাট্রিক্সে ২ = শত্রু, ১ = দেওয়াল, ০ = খালি সেল। একটি বম শুধু খালি সেলে রাখা যায়। বম একই সারি ও কলামের সব শত্রুকে ধ্বংস করে যতক্ষণ না দেওয়াল পায়। সর্বোচ্চ কতজন শত্রু ধ্বংস করা যায় তা বের করতে হবে।

উদাহরণ

ম্যাট্রিক্স:

0 2 0 0
2 0 1 2
0 2 0 0

আউটপুট: 3 (হরিট বক্সে বম রাখলে ৩ জন শত্রু মরে)

অ্যালগরিদম (O(n×m) প্রি-কম্পিউটেশন)

  1. প্রতিটি সেলের জন্য সারি ও কলামে দেওয়াল না পাওয়া পর্যন্ত শত্রুর সংখ্যা প্রি-কম্পিউট করুন।
  2. rowCnt = বর্তমান সারি সেগমেন্টে শত্রু সংখ্যা।
  3. colCnt[j] = বর্তমান কলাম সেগমেন্টে শত্রু সংখ্যা।
  4. প্রতিটি খালি সেল (০) এর জন্য rowCnt + colCnt[j] ক্যালকুলেট করুন এবং সর্বোচ্চ মান রাখুন।

C++ কোড উদাহরণ

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int maxKilledEnemies(vector>& grid) {
        int n = grid.size();
        if (n == 0) return 0;
        int m = grid[0].size();
        
        int ret = 0;
        int rowCnt = 0;
        vector colCnt(m, 0);
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                // Row count update
                if (j == 0 || grid[i][j-1] == 1) {
                    rowCnt = 0;
                    for (int k = j; k < m && grid[i][k] != 1; k++)
                        rowCnt += (grid[i][k] == 2);
                }
                
                // Col count update
                if (i == 0 || grid[i-1][j] == 1) {
                    colCnt[j] = 0;
                    for (int k = i; k < n && grid[k][j] != 1; k++)
                        colCnt[j] += (grid[k][j] == 2);
                }
                
                if (grid[i][j] == 0)
                    ret = max(ret, rowCnt + colCnt[j]);
            }
        }
        return ret;
    }
};

int main() {
    Solution ob;
    vector> v = {
        {0, 2, 0, 0},
        {2, 0, 1, 2},
        {0, 2, 0, 0}
    };
    cout << ob.maxKilledEnemies(v);
    return 0;
}

ইনপুট

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

আউটপুট

3
  1. C++-এ একটি সংখ্যার জোড় ফ্যাক্টরগুলোর যোগফল বের করা (Sum of Even Factors)

  2. সি++ প্রোগ্রাম: সর্বোচ্চ এজ-ডিসজয়েন্ট পাথ (Maximum Number of Edge Disjoint Paths) বের করা

  3. রিকার্সন ব্যবহার করে সংখ্যার ফ্যাক্টোরিয়াল বের করার C++ প্রোগ্রাম

  4. পাইথন প্রোগ্রাম - যেকোনো জায়গায় ৫ যোগ করে সর্বাধিক সংখ্যা বের করুন