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

C++-এ K দিয়ে বিভাজ্য সাবঅ্যারে সম


অ্যারে A এবং পূর্ণসংখ্যা k দেওয়া। কতটি কনটিগুয়াস নন-এমপটি সাবঅ্যারে আছে যেন সাবঅ্যারেটির সম k দিয়ে বিভাজ্য।

উদাহরণ: A=[4,5,0,-2,-3,1], k=5 → ৭টি সাবঅ্যারে।

সমাধানের ধাপসমূহ

  • প্রিফিক্স সম মডুলো k ব্যবহার করুন।
  • হ্যাশম্যাপ m রেখে প্রতিটি মডুলো ভ্যালুর ফ্রিকোয়েন্সি ট্র্যাক করুন।
  • m[0] = 1 ইনিশিয়ালাইজ করুন।
  • প্রতিটি উপাদানের জন্য প্রিফিক্স সম আপডেট করুন, x = (sum % k + k) % k।
  • ans += m[x], তারপর m[x]++।

C++ উদাহরণ

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

class Solution {
public:
    int subarraysDivByK(vector<int>& a, int k) {
        unordered_map<int, int> m;
        m[0] = 1;
        int sum = 0, ans = 0;
        for (int x : a) {
            sum += x;
            int mod = (sum % k + k) % k;
            ans += m[mod];
            m[mod]++;
        }
        return ans;
    }
};

int main() {
    vector<int> v = {4,5,0,-2,-3,1};
    Solution ob;
    cout << ob.subarraysDivByK(v, 5);
}

ইনপুট

[4,5,0,-2,-3,1] 5

আউটপুট

7
  1. সার্কুলার সাবঅ্যারে সর্বোচ্চ সমষ্টি C++-এ

  2. C++-এ Subarray Sum Equals K

  3. C++-এ ম্যাক্সিমাম সাবঅ্যারে সাম মডুলো m

  4. C++-এ সাবঅ্যারে ফ্লিপ করে ০-এর সংখ্যা সর্বাধিক করা