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

C++-এ ফ্রিকোয়েন্সি সাম.Sleep 2*k সীমাবদ্ধতায় অ্যারেতে সর্বোচ্চ গুণফল বের করার প্রোগ্রাম


সমস্যা বিবরণ

একটি অ্যারে এবং ইন্টিজার k দেওয়া থাকলে, অ্যারে থেকে কিছু এলিমেন্ট বেছে নিতে হবে যাতে তাদের গুণফল সর্বোচ্চ হয়। শর্ত: প্রোডাক্টে যেসব এলিমেন্ট একাধিকবার আছে, তাদের ফ্রিকোয়েন্সি সম্মিলিত (frequency sum) 2×k-এর চেয়ে বেশি হবে না।

সমাধানের পদ্ধতি

  1. অ্যারে সর্ট করুন।
  2. প্রতিটি ইউনিক এলিমেন্ট একবার করে গুণ করুন (প্রোডাক্টে যোগ করুন)।
  3. ফ্রিকোয়েন্সি ম্যাপ বানান।
  4. সর্বোচ্চ মান থেকে শুরু করে পিছিয়ে আসুন:
    • যদি k >= (freq-1) হয়, তবে সেই এলিমেন্ট (freq-1) বার যোগ করুন, k কমান।
    • যদি k < (freq-1) হয়, তবে k বার যোগ করুন এবং ব্রেক।

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

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

#define ll long long int

ll maxProd(int arr[], int n, int k) {
    ll product = 1;
    unordered_map s;
    sort(arr, arr + n);
    for (int i = 0; i < n; i++) {
        if (s[arr[i]] == 0) {
            product = product * arr[i];
        }
        s[arr[i]] = s[arr[i]] + 1;
    }
    for (int j = n - 1; j >= 0 && k > 0; j--) {
        if ((k > (s[arr[j]] - 1)) && ((s[arr[j]] - 1) > 0)) {
            product *= pow(arr[j], s[arr[j]] - 1);
            k = k - s[arr[j]] + 1;
            s[arr[j]] = 0;
        }
        if (k <= (s[arr[j]] - 1) && ((s[arr[j]] - 1) > 0)) {
            product *= pow(arr[j], k);
            break;
        }
    }
    return product;
}

int main() {
    int arr[] = {5, 6, 7, 8, 2, 5, 6, 8};
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 2;
    cout << maxProd(arr, n, k);
    return 0;
}

আউটপুট

161280

ব্যাখ্যা

সর্টেড: [2,5,5,6,6,7,8,8]

ইউনিক গুণফল: 2×5×6×7×8 = 3360

k=2, ফ্রিকোয়েন্সি: 5(2),6(2),8(2)

এক্সট্রা: 8^(2-1)=8, 6^(2-1)=6 → k=0

মোট = 3360 × 8 × 6 = 161280

জটিলতা

  • সময়: O(n log n)
  • স্থান: O(n)
  1. C++-এ সার্কুলার অ্যারেতে আঁচবিক উপাদান ছাড়া সর্বোচ্চ যোগফল বের করার পদ্ধতি

  2. C++-এ निरপেক্ষ পার্থক্য ১ বা তদন uglיף একটি অ্যারে থেকে সর্বোচ্চ উপাদান নির্বাচন

  3. C++ ব্যবহার করে অ্যারেতে বাম ও ডান পাশের যোগফল সমান হয় এমন এলিমেন্ট বের করা

  4. C++ ব্যবহার করে অ্যারেতে এমন এলিমেন্ট বের করা যেটি সব এলিমেন্টকে ভাগ করে দেয়