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

C++-এ তিনটি সমান বাইনারি পার্টিশন

সমস্যা বিবরণ

বাইনারি অ্যারে A দেওয়া থাকলে, সেটিকে ৩টি নন-ইম্পটি অংশে ভাগ করতে হবে যাতে তিনों পার্টের বাইনারি মান সমান হয়। সম্ভব হলে [i, j] রিটার্ন করুন (i+1 < j), নাহলে [-1, -1]।

উদাহরণ

A = [0,1,0,1,1] → আউটপুট = [0, 4]

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

  • টোটাল ১-এর সংখ্যা ৩ দিয়ে বিভাজ্য হলেই সম্ভব।
  • শেষ পার্টের ১-গুলোর পজিশন থেকে ট্রেলিং জিরো নির্ণয় করা হয়।
  • getIdx() ফাংশন দিয়ে লিডিং জিরো স্কিপ করে পার্ট বাউন্ডারি বের করা হয়।
  • প্রথম ও দ্বিতীয় পার্টের বাউন্ডারি মিলিয়ে যাচাই করা হয়।

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

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

void print_vector(vector<int> v) {
    cout << "[";
    for (int i = 0; i < v.size(); i++) cout << v[i] << ", ";
    cout << "]" << endl;
}

class Solution {
    int getIdx(vector<int>& a, int left, int right) {
        while (left < right && a[left] == 0) left++;
        while (right < (int)a.size()) {
            if (a[left] != a[right]) return -1;
            left++; right++;
        }
        return left - 1;
    }
    
public:
    vector<int> threeEqualParts(vector<int>& A) {
        vector<int> ret(2, -1);
        int num = 0, n = A.size();
        for (int x : A) num += (x == 1);
        
        if (num % 3 != 0) return ret;
        if (num == 0) return {0, 2};
        
        int req = num / 3, idx = n - 1;
        for (int temp = 0; idx >= 0 && temp < req; idx--)
            temp += (A[idx] == 1);
        idx++;
        
        int firstEnd = getIdx(A, 0, idx);
        if (firstEnd < 0) return ret;
        
        int secondEnd = getIdx(A, firstEnd + 1, idx);
        if (secondEnd < 0) return ret;
        
        return {firstEnd, secondEnd + 1};
    }
};

int main() {
    Solution ob;
    vector<int> v = {0,1,0,1,1};
    print_vector(ob.threeEqualParts(v));
    return 0;
}

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

ইনপুট: {0,1,0,1,1}

আউটপুট: [1, 4]

  1. C++-এ তিনটি সংখ্যা শূন্য করার সর্বনিম্ন ধাপ গণনা

  2. স্ট্রিংকে N সমান অংশে ভাগ করা C++ প্রোগ্রামে

  3. সি++-এ সমান যোগফল এবং XOR

  4. বাইনারি ট্রি সমান পার্টিশান করা C++-এ