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

আউটপুট: 3 (সবুজ চিহ্নিত স্থানে বম বমালে ৩টি শত্রু নিহত হবে)।
সমাধানের পদ্ধতি (Precompute Row/Column Counts)
ret = 0, সারি সংখ্যাn, কলাম সংখ্যাm।- কলাম-ওয়াইজ কাউন্ট রাখার জন্য
colCnt[m]অ্যারে। - প্রতিটি সেল
(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])আপডেট করুন।
- সারি কাউন্ট (rowCnt): যদি
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