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

C++-এ K বার সংলগ্ন দুটি সেট বিট সহ বাইনারি স্ট্রিং গণনা

আমাদের N এবং K দুটি ইন্টিজার দেওয়া আছে। N দৈর্ঘ্যের বাইনারি স্ট্রিং (০ এবং ১) তৈরি করতে হবে যাতে সেগুলোতে K বার সংলগ্ন ১ থাকে। যেমন N=3, K=2 হলে ১১১ স্ট্রিংয়ে সংলগ্ন ১ দুবার (K বার) পাওয়া যায়। ০১১ এবং ১১০-এ একবার পাওয়া যায়।

এটি ৩D ডাইনামিক প্রোগ্রামিং দিয়ে সমাধান করা হয়। count[x][y][z] এরে ব্যবহার করা হয় যেখানে x = N, y = K, z = স্ট্রিংয়ের শেষ ডিজিট (০ বা ১)।

  • N=1 হলে স্ট্রিং "০" এবং "১", সংলগ্ন ১-এর কাউন্ট ০। সুতরাং count[1][K][0] = count[1][K][1] = 0।
  • শেষ ডিজিট ০ হলে: count[N][K][0] = count[N-1][K][0] + count[N-1][K][1]
  • শেষ ডিজিট ১ হলে: count[N][K][1] = count[N-1][K][0] + count[N-1][K-1][1]
  • মোট স্ট্রিং = count[N][K][0] + count[N][K][1]

ইনপুট

N=4, K=2

আউটপুট

Count of strings: 2

ব্যাখ্যা: ১১১০, ০১১১ - এই দুটি স্ট্রিংয়ের দৈর্ঘ্য ৪ এবং সংলগ্ন ১ দুবার পাওয়া যায়।

ইনপুট

N=3, K=1

আউটপুট

Count of strings: 2

ব্যাখ্যা: ১১০, ০১১ - দৈর্ঘ্য ৩ এবং সংলগ্ন ১ একবার। ১১১-এ দুবার পাওয়া যায়।

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

  • N এবং K ইন্টিজার হিসেবে স্টোর করা।
  • stringcount(int n, int k) ফাংশন স্ট্রিং কাউন্ট রিটার্ন করে।
  • count[i][j][0/1] এরে দিয়ে দৈর্ঘ্য i, j বার সংলগ্ন ১, এবং শেষ ডিজিট ০/১ olan স্ট্রিংর সংখ্যা স্টোর করা।
  • বেইস কেস: count[1][0][0] = 1; count[1][0][1] = 1;
  • i=2 থেকে n পর্যন্ত এবং j=0 থেকে k পর্যন্ত লুপে DP টেবিল আপডেট করা।
  • শেষে count[n][k][0] + count[n][k][1] রিটার্ন করা।

উদাহরণ কোড

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

int stringcount(int n, int k){
    int count[n + 1][k + 1][2] = {0};
    count[1][0][0] = 1;
    count[1][0][1] = 1;
    for (int i = 2; i <= n; i++) {
        for (int j = 0; j <= k; j++) {
            count[i][j][0] = count[i - 1][j][0] + count[i - 1][j][1];
            count[i][j][1] = count[i - 1][j][0];
            if (j - 1 >= 0)
                count[i][j][1] += count[i - 1][j - 1][1];
        }
    }
    int result = count[n][k][0] + count[n][k][1];
    return result;
}

int main(){
    int N = 6, K = 3;
    cout << "Strings of length 6 and 3 adjacent 1's in each :" << stringcount(N, K);
    return 0;
}

আউটপুট

Strings of length 6 and 3 adjacent 1's in each :7
  1. সি++-এ দুটি বাইনারি স্ট্রিং যোগ করার প্রোগ্রাম

  2. C++-এ সেট বিট কাউন্ট অনুযায়ী অ্যারে সর্ট করা

  3. C++-এ k সেট বিটস সহ একটি নম্বরকে ম্যাক্সিমাইজ করতে ন্যূনতম ফ্লিপ বের করা

  4. C++-এ n বাইনারি স্ট্রিং যোগ করার পদ্ধতি