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

C++-এ একটি অ্যারে থেকে x^y > y^x শর্ত পূরণকারী (x, y) জোড়ার সংখ্যা খুঁজুন

ধরুন X এবং Y হলো দুটি ধনাত্মক পূর্ণসংখ্যার অ্যারে। এমন (x, y) জোড়াগুলোর সংখ্যা বের করতে হবে যাতে x^y > y^x, যেখানে x ∈ X এবং y ∈ Y। উদাহরণস্বরূপ, X = [2, 1, 6] এবং Y = [1, 5] হলে আউটপুট হবে ৩। কারণ তিনটি জোড়া আছে: (2, 1), (2, 5) এবং (6, 1)।

দক্ষ সমাধান

এই সমস্যাটি দক্ষতার সাথে সমাধান করা যায়। মূল লজিক হলো: যদি y > x হয়, তবে x^y > y^x হবে, কিন্তু কিছু استثনা রয়েছে। এই استثনাগুলো হ্যান্ডেল করেই সমাধান পাওয়া যায়।

  • প্রথমে Y অ্যারেটি সর্ট করুন।
  • X-এর প্রতিটি উপাদান x-এর জন্য, Y-তে x-র চেয়ে বড় সবচেয়ে ছোট সংখ্যার ইনডেক্স বাইনারি সার্চ (বা upper_bound ফাংশন) দিয়ে খুঁজুন।
  • সেই ইনডেক্সের পরে থাকা সব সংখ্যা শর্ত পূরণ করে, তাই তাদের গণনা যোগ করুন।
উদাহরণ কোড
#include <iostream>
#include <algorithm>
using namespace std;

int count(int x, int Y[], int n, int no_of_y[]) {
    if (x == 0) return 0;
    if (x == 1) return no_of_y[0];
    int* index = upper_bound(Y, Y + n, x);
    int ans = (Y + n) - index;
    ans += (no_of_y[0] + no_of_y[1]);
    if (x == 2) ans -= (no_of_y[3] + no_of_y[4]);
    if (x == 3) ans += no_of_y[2];
    return ans;
}

int howManyPairs(int X[], int Y[], int m, int n) {
    int no_of_y[5] = {0};
    for (int i = 0; i < n; i++)
        if (Y[i] < 5) no_of_y[Y[i]]++;
    sort(Y, Y + n);
    int total_pairs = 0;
    for (int i = 0; i < m; i++)
        total_pairs += count(X[i], Y, n, no_of_y);
    return total_pairs;
}

int main() {
    int X[] = {2, 1, 6};
    int Y[] = {1, 5};
    int m = sizeof(X)/sizeof(X[0]);
    int n = sizeof(Y)/sizeof(Y[0]);
    cout << "Total pair count: " << howManyPairs(X, Y, m, n);
}
আউটপুট
Total pair count: 3
  1. C++ ব্যবহার করে অ্যারেতে XOR ০ হয় এমন জোড়ার সংখ্যা বের করা

  2. C++ ব্যবহার করে দৈর্ঘ্য L-এর ম্যাজিক্যাল স্ট্রিং জোড়ার সংখ্যা বের করা

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

  4. C++ ব্যবহার করে অ্যারেতে a % b = k সেটি করার সব জোড়া (a, b) বের করা