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

C++-এ প্রায়োরিটি কিউ দিয়ে অ্যারে একটি পূর্ণসংখ্যায় রিডিউস করুন


একটি পূর্ণসংখ্যা Number দেওয়া থাকলে, ১ থেকে Number পর্যন্ত মান ধারণকারী অ্যারেটি Number-1 বার নিচের অপারেশন দিয়ে রিডিউস করতে হবে:

  • অ্যারে থেকে দুটি এলিমেন্ট A ও B বেছে নিন।

  • উনাদের অ্যারে থেকে সরিয়ে A² + B² যোগ করুন।

শেষে একটি মাত্র পূর্ণসংখ্যা থাকবে; লক্ষ্য হলো সেই মান সর্বাধিক করা।

প্রায়োরিটি কিউ ব্যবহার

  • সর্বোচ্চ ফলাফলের জন্য সর্বোচ্চ A ও B বেছে নেওয়া উচিত।

  • প্রায়োরিটি কিউ (max-heap) দিয়ে সর্বোচ্চ দুটি এলিমেন্ট বের করা হয়।

  • দুটি এলিমেন্ট পপ করিয়ে তাদের বর্গের যোগফল আবার পুশ করুন।

  • এটি Number-1 বার চলবে।

উদাহরণ

ইনপুট − Number = 2

আউটপুট − অ্যারে রিডাকশনের পর একক এলিমেন্ট: 5

ব্যাখ্যা − অ্যারে [1,2], PQ: 2,1। A=2,B=1 → 4+1=5।

ইনপুট − Number = 5

আউটপুট − অ্যারে রিডাকশনের পর একক এলিমেন্ট: 1187163713

ব্যাখ্যা − ধাপে ধাপে বর্গের যোগফল বেড়ে যাওয়া দেখানো হয়েছে।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

প্রায়োরিটি কিউতে ১ থেকে N পর্যন্ত মান পুশ করুন। প্রতিবার শীর্ষ দুটি মান পপ করিয়ে বর্গের যোগফল পুশ করুন। শেষে শীর্ষ মান ফেরত দিন।

  • ইনপুট Number নিন।

  • lli টাইপডেফ ব্যবহার করুন।

  • reduceArray(int Num) ফাংশন ফলাফল ফেরত দেয়।

  • priority_queue pQueue ঘোষণা করুন।

  • while(i<=Num) pQueue.push(i++) দিয়ে পূরণ করুন।

  • while(pQueue.size() > 1) লুপে শীর্ষ দুটি পপ করিয়ে বর্গের যোগফল পুশ করুন।

  • শেষে pQueue.top() ফেরত দিন।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;
#define lli long long int

int reduceArray(int Num){
    priority_queue pQueue;
    int i = 1;
    while(i <= Num){
        pQueue.push(i);
        i = i + 1;
    }
    while (pQueue.size() > 1) {
        lli var1 = pQueue.top(); pQueue.pop();
        lli var2 = pQueue.top(); pQueue.pop();
        var1 = var1 * var1;
        var2 = var2 * var2;
        pQueue.push(var1 + var2);
    }
    return pQueue.top();
}

int main(){
    int Number = 5;
    cout << "Single element after array reduction: " << reduceArray(Number);
    return 0;
}

আউটপুট

উপরের কোড রান করলে নিচের আউটপুট পাওয়া যাবে:

Single element after array reduction: 1187163713
  1. C++-তে অ্যারে আকার অর্ধেক করতে_MINIMUM সেট আকার নির্ণয়

  2. C++-এ একটি ইন্টিজার অ্যারে থেকে সব স্বতন্ত্র উপাদান প্রিন্ট করা

  3. C++-এ দেওয়া অপারেশন দিয়ে অ্যারে যোগফল সর্বাধিক করা

  4. দেওয়া পার্থক্যের সাথে একটি জোড়া খুঁজে বের করা C++-এ