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

C++-এ ন্যূনতম রি-ফিউয়েলিং স্টপ

সমস্যা বিবরণ

টার্গেট দূরত্ব t, প্রাথমিক ফুয়েল startFuel, এবং গ্যাস স্টেশনের তালিকা (পজিশন, ফুয়েল) দেওয়া থাকলে। গাড়ি ১ মাইল প্রতি ১ লিটার ফুয়েল খরচ করে। ন্যূনতম কতবার রি-ফিউয়েল করতে হবে টার্গেটে পৌঁছানোর জন্য? অসম্ভব হলে -1।

উদাহরণ

Target = 100, startFuel = 10, stations = [[10,40],[20,30],[30,20],[60,40]] → আউটপুট = 3

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

  • গ্রিডি + প্রায়ориটি কিউ (Max Heap) ব্যবহার করা হয়।
  • বর্তমান ফুয়েল দিয়ে যতদূর যাওয়া যায়, পথের স্টেশনগুলো পিকিউতে রাখা হয়।
  • ফুয়েল চুকলে পিকিউ থেকে সর্বোচ্চ ফুয়েল নেওয়া হয়।
  • স্টেশন খালি হলে -1 রিটার্ন।

C++ বাস্তবায়ন

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

class Solution {
public:
    int minRefuelStops(int target, int fuel, vector<vector<int>> &st) {
        sort(st.begin(), st.end());
        priority_queue<int> pq;
        int i = 0, cnt = 0, curr = fuel;
        
        while (curr < target) {
            cnt++;
            while (i < st.size() && st[i][0] <= curr) {
                pq.push(st[i][1]);
                i++;
            }
            if (pq.empty()) break;
            curr += pq.top();
            pq.pop();
        }
        return curr >= target ? cnt : -1;
    }
};

int main() {
    Solution ob;
    vector<vector<int>> v = {{10,40},{20,30},{30,20},{60,40}};
    cout << ob.minRefuelStops(100, 10, v);
    return 0;
}

ইনপুট ও আউটপুট

ইনপুট: 100, 10, {{10,40},{20,30},{30,20},{60,40}}

আউটপুট: 3

  1. Frugal সংখ্যা চেক করা (C++)

  2. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা

  3. C++ ব্যবহার করে একটি সংখ্যার ফ্যাক্টরের ন্যূনতম যোগফল বের করা

  4. C++-এ ন্যূনতম পৃষ্ঠা বণ্টন (Allocate Minimum Pages)