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

C++-এ Bomb Enemy: বম বমায় সর্বোচ্চ শত্রু নিহত করা

একটি ২D গ্রিড দেওয়া আছে যেখানে প্রতিটি সেল হয় দেওয়াল ('W'), শত্রু ('E') বা খালি ('0')। একটা বম বমাতে হবে যাতে একই সারি এবং কলামে (দেওয়াল পর্যন্ত) সর্বোচ্চ শত্রু নিহত হয়। বম শুধু খালি সেলে বমানো যায়।

উদাহরণ

C++-এ Bomb Enemy: বম বমায় সর্বোচ্চ শত্রু নিহত করা

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

সমাধানের পদ্ধতি (Precompute Row/Column Counts)

  1. ret = 0, সারি সংখ্যা n, কলাম সংখ্যা m।
  2. কলাম-ওয়াইজ কাউন্ট রাখার জন্য colCnt[m] অ্যারে।
  3. প্রতিটি সেল (i, j) এর জন্য:
    • সারি কাউন্ট (rowCnt): যদি j == 0 বা grid[i][j] == 'W' হয়, তবে সারি কাউন্ট রিক্যালকুলেট করুন: বর্তমান পজিশন থেকে ডান দিকে দেওয়াল না পাওয়া পর্যন্ত 'E' গুনুন।
    • কলাম কাউন্ট (colCnt[j]): যদি i == 0 বা grid[i][j] == 'W' হয়, তবে কলাম কাউন্ট রিক্যালকুলেট করুন: বর্তমান পজিশন থেকে নিচের দিকে দেওয়াল না পাওয়া পর্যন্ত 'E' গুনুন।
    • যদি grid[i][j] == '0' হয়, তবে ret = max(ret, rowCnt + colCnt[j]) আপডেট করুন।
  4. ret রিটার্ন করুন।

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

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

class Solution {
public:
    int maxKilledEnemies(vector<vector<char>>& grid) {
        int ret = 0;
        int n = grid.size();
        int m = n ? grid[0].size() : 0;
        int rowCnt = 0;
        vector<int> colCnt(m);
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                // Row count calculation
                if (!j || grid[i][j] == 'W') {
                    rowCnt = 0;
                    int k;
                    if (grid[i][j] == 'W') k = j + 1;
                    else k = j;
                    for (; k < m && grid[i][k] != 'W'; k++)
                        rowCnt += (grid[i][k] == 'E');
                }
                
                // Column count calculation
                if (!i || grid[i][j] == 'W') {
                    colCnt[j] = 0;
                    int k;
                    if (grid[i][j] == 'W') k = i + 1;
                    else k = i;
                    for (; k < n && grid[k][j] != 'W'; k++)
                        colCnt[j] += (grid[k][j] == 'E');
                }
                
                // Update result if empty cell
                if (grid[i][j] == '0')
                    ret = max(ret, rowCnt + colCnt[j]);
            }
        }
        return ret;
    }
};

int main() {
    Solution ob;
    vector<vector<char>> v = {{'0','E','0','0'},{'E','0','W','E'},{'0','E','0','0'}};
    cout << (ob.maxKilledEnemies(v));
    return 0;
}

ইনপুট

{{'0','E','0','0'},{'E','0','W','E'},{'0','E','0','0'}}

আউটপুট

3
  1. C vs BASH ফর্ক বম: C/C++-এ তুলনা

  2. সি++ কোড: হथিয়ার দিয়ে শত্রু হত্যা করতে ন্যূনতম মুভ গণনা করুন

  3. Frugal সংখ্যা চেক করা (C++)

  4. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা