কম্পিউটার

C++ ব্যবহার করে একটি বাইনারি স্ট্রিং এর 1 দিয়ে শুরু হওয়া অনন্য পারমুটেশনের সংখ্যা খুঁজুন


প্রদত্ত সমস্যাটিতে, আমাদের 0 এবং 1 এর সমন্বয়ে একটি স্ট্রিং দেওয়া হয়েছে; স্ট্রিংটি 1 দিয়ে শুরু হওয়ার জন্য আমাদের মোট সংখ্যাক্রমিক সংখ্যা খুঁজে বের করতে হবে। যেহেতু উত্তরটি একটি বিশাল সংখ্যা হতে পারে, তাই আমরা 1000000007 সহ একটি মোড হিসাবে প্রিন্ট করি৷

Input : str ="10101001001"
Output : 210

Input : str ="101110011"
Output : 56

আমরা কিছু সমন্বয় প্রয়োগ করে এবং এই সমস্যা সমাধানের জন্য কিছু সূত্র তৈরি করে প্রদত্ত সমস্যার সমাধান করব।

সমাধান খোঁজার পদ্ধতি

পদ্ধতিতে, আমরা 0 এবং 1 এর সংখ্যা গণনা করব। এখন ধরা যাক n হল আমাদের স্ট্রিং-এ উপস্থিত 1-এর সংখ্যা এবং m হল আমাদের স্ট্রিং-এ উপস্থিত 0-এর সংখ্যা এবং L হল আমাদের প্রদত্ত স্ট্রিং-এর দৈর্ঘ্য, তাই এই সমস্যা সমাধানের জন্য আমরা যে সূত্রটি তৈরি করি তা হল (L-1) )!/ (n-1)! * মি!.

উদাহরণ

#include <bits/stdc++.h>
#define MOD 1000000007 // defining 1e9 + 7 as MOD

using namespace std;

long long fact(long long n) {
   if(n <= 1)
   return 1;
   return ((n % MOD) * (fact(n-1) % MOD)) % MOD;
}
int main() {
   string s = "101110011";
   long long L = s.size(); // length of given string
   long long count_1 = 0, count_0 = 0; // keeping count of 1's and 0's
   for(auto x : s) {
      if(x == '1')
         count_1++; // frequency of 1's
      else
        count_0++; // frequency of 0's
   }
   if(count_1 == 0){
      cout << "0\n"; // if string only consists of 0's so our answer will be 0
   } else {
      long long factL = fact(L-1); // (L-1)!
      long long factn = fact(count_1 - 1); // (n-1)!
      long long factm = fact(count_0); // m!
      long long ans = factL / (factn * factm); // putting the formula
      cout << ans << "\n";
   }
   return 0;
}

আউটপুট

56

প্রদত্ত প্রোগ্রামে O(N) এর একটি সময় জটিলতা রয়েছে, যেখানে n হল আমাদের প্রদত্ত স্ট্রিংটির দৈর্ঘ্য।

উপরের কোডের ব্যাখ্যা

এই পদ্ধতিতে, আমরা এখন আমাদের স্ট্রিংয়ের ভিতরে উপস্থিত 1 এবং 0 এর সংখ্যা গণনা করছি, আমরা একটিকে শুরুতে রাখি এবং এখন L-1 দৈর্ঘ্যের স্ট্রিংটিতে 0 এবং 1 এর সম্ভাব্য সমস্ত পারমুটেশন তৈরি করি তাই আমরা এটি তৈরি করে (L-1) এর সূত্র পান! /(n-1)! * মি! কোথায় (n-1)! বাকি 1 এর পারমুটেশন, এবং মি! 0 এর স্থানান্তর।

উপসংহার

এই নিবন্ধে, আমরা একটি বাইনারি স্ট্রিং এর 1 দিয়ে শুরু হওয়া অনন্য পারমুটেশনের সংখ্যা খুঁজে বের করার জন্য কিছু কম্বিনেটরিক্স প্রয়োগ করে এবং এর জন্য একটি সূত্র তৈরি করে একটি সমস্যার সমাধান করি।

আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং সম্পূর্ণ পদ্ধতি (সাধারণ) শিখেছি যার মাধ্যমে আমরা এই সমস্যার সমাধান করেছি। আমরা অন্যান্য ভাষা যেমন সি, জাভা, পাইথন এবং অন্যান্য ভাষায় একই প্রোগ্রাম লিখতে পারি। আমরা আশা করি আপনার এই নিবন্ধটি সহায়ক হবে৷


  1. C++ ব্যবহার করে পঞ্চভুজ পিরামিডাল নম্বর খুঁজুন

  2. C++ ব্যবহার করে একটি স্ট্রিং এর সাবস্ট্রিং এর সংখ্যা খুঁজুন

  3. C++ ব্যবহার করে m বিজোড় সংখ্যা সহ সাবাররে সংখ্যা খুঁজুন

  4. C++ ব্যবহার করে স্টপিং স্টেশনের সংখ্যা খুঁজুন