একটি গ্রিড দেওয়া আছে। আমাদের সেই গ্রিডে কতটুকু ৩x৩ ম্যাজিক স্কোয়ার সাব-গ্রিড আছে তা বের করতে হবে। ম্যাজিক স্কোয়ার হল ১ থেকে ৯ পর্যন্ত স্বতন্ত্র সংখ্যা দিয়ে ভরা ৩x৩ গ্রিড যাতে প্রতিটি সারি, কলাম এবং দুটি ডায়াগোনালের যোগফল সমান থাকে।
ইনপুট [[4,3,8,4],[9,5,1,9],[2,7,6,2]] হলে আউটপুট ১, কারণ ম্যাজিক স্কোয়ারটি:
4 3 8
9 5 1
2 7 6
সমাধানের ধাপসমূহ
- ৮টি সম্ভাব্য ম্যাজিক স্কোয়ারের সংখ্যা একটি সেটে সংরক্ষণ করুন
- অফসেট অ্যারে ব্যবহার করে ৩x৩ গ্রিডের সংখ্যা একত্রিত করুন
- প্রতিটি ৩x৩ সাব-গ্রিড চেক করুন সেটে আছে কিনা
- মোট সংখ্যা রিটার্ন করুন
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int numMagicSquaresInside(vector<vector<int>>& grid) {
const unordered_set<int> s{816357492, 834159672, 618753294,
672159834,492357816, 438951276, 294753618,276951438};
const int offset[][2] = {{-2, -2}, {-2, -1}, {-2, 0},{-1, -2}, {-1, -1}, {-1, 0}, { 0, -2}, { 0, -1}, { 0, 0}};
int ans = 0;
for(int i = 2; i< grid.size(); i++)
{
for(int j = 2; jইনপুট
{{4,3,8,4},{9,5,1,9},{2,7,6,2}}আউটপুট
1