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

C++-এ ঘূর্ণনশীল দরজা: অনুরোধ প্রক্রিয়াকরণ সিমুলেশন

একটি ঘূর্ণনশীল দরজার জন্য অনুরোধের তালিকা দেওয়া আছে। প্রতিটি অনুরোধ [t, d] আকারে, যেখানে t = সময়, d = দিক (১ = ভিতর, ০ = বাইরে)। দরজা একবারে একজনের জন্য খোলা থাকে এবং ১ টাইম ইউনিট সময় লাগে।

নিয়মাবলী

  • দরজা শুরুতে 'ভিতর' (1) অবস্থায় থাকে
  • একই সময়ে একাধিক অনুরোধ থাকলে, আগে যারা আসে তিনি প্রথম পাবেন
  • দিক konflikt হলে, আগের ব্যবহৃত দিকটি অগ্রাধিকার পাবে
  • ১ টাইম ইউনিট কেউ ব্যবহার না করলে দরজা আবার 'ভিতর' অবস্থায় ফিরে যায়

উদাহরণ

ইনপুট: [[2,0],[3,1],[6,0],[6,1],[3,0]]

আউটপুট: [[2,0],[3,0],[4,1],[6,1],[7,0]]

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

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

class Solution {
public:
    vector<vector<int>> solve(vector<vector<int>>& v) {
        sort(v.begin(), v.end());
        vector<vector<int>> ret;
        int curr = 1, i = 0, n = v.size();
        
        while (i < n) {
            if (!ret.empty() && v[i][0] - ret.back()[0] > 1)
                curr = 1;
            
            int j = i + 1;
            vector<int> arr(2, 0);
            arr[v[i][1]]++;
            while (j < n && v[j][0] == v[i][0]) {
                arr[v[j][1]]++;
                j++;
            }
            
            int t = max(ret.empty() ? 0 : ret.back()[0] + 1, v[i][0]);
            
            if (arr[0] && arr[1]) {
                while (arr[curr]--) {
                    ret.push_back({t, curr});
                    t++;
                }
                curr ^= 1;
                while (arr[curr]--) {
                    ret.push_back({t, curr});
                    t++;
                }
            } else {
                curr = v[i][1];
                while (arr[curr]--) {
                    ret.push_back({t, curr});
                    t++;
                }
            }
            curr = ret.back()[1];
            i = j;
        }
        return ret;
    }
};

মূল লজিক

একই টাইমস্ট্যাম্পের সব অনুরোধ একসাথে প্রক্রিয়া করা হয়। দুটি দিকের অনুরোধ থাকলে বর্তমান দিকের Anfrage-গুলো আগে প্রক্রিয়া করা হয়, তারপর অন্য দিকের।

  1. C++-এ জাম্প গেম V (Jump Game V)

  2. সি++-এ বিউটিফুল অ্যারে (Beautiful Array)

  3. C++-এ K ডিজিট রিমুভ করে সবচেয়ে ছোট সংখ্যা বানানো

  4. C++-এ ফোর ডিভাইজারস (Four Divisors) সমস্যা সমাধান