কম্পিউটার

C++ এ 0 হিসাবে অন্যান্য বাইনারি স্ট্রিং সহ XOR সহ চক্রীয় স্থানচ্যুতিগুলির গণনা


আমাদেরকে দুটি বাইনারি স্ট্রিং দেওয়া হয়েছে, আসুন str_1 এবং str_2 বলি যাতে 1's এবং 0's এর সংমিশ্রণ রয়েছে এবং কাজটি হল প্রথমে সেট তৈরি করা, আসুন str_1 থেকে সম্ভাব্য বিভিন্ন পারমুটেশনের "SET" বলি এবং তারপরে আমরা XOR অপারেশনগুলি সম্পাদন করব। বাইনারি স্ট্রিং str_2 সহ উপাদান সেট করুন এবং তারপর XOR 0 রিটার্ন করছে কিনা তা পরীক্ষা করুন। যদি হ্যাঁ, তাহলে কেসটি বিবেচনা করুন অন্যথায় এটি উপেক্ষা করুন৷

আসুন উদাহরণ দিয়ে বোঝা যাক।

উদাহরণস্বরূপ

ইনপুট - string str_1 ="1111", string str_2 ="1111"

আউটপুট - 0 হিসাবে অন্যান্য বাইনারি স্ট্রিং সহ XOR সহ চক্রীয় স্থানচ্যুতিগুলির সংখ্যা হল:4

ব্যাখ্যা - আমরা স্ট্রিং str_2 ব্যবহার করে সেট তৈরি করব এবং সেট হবে {1111}। এখন আমরা স্ট্রিং str_1 ব্যবহার করে XOR অপারেশনগুলি সম্পাদন করব এবং সেট তৈরি করব এভাবে {1111} ^ “1111” =0। যেহেতু আমাদের স্ট্রিং str_2-এ 4টি অনুরূপ উপাদান রয়েছে তাই আমরা 4টি ভিন্ন পারমুটেশন তৈরি করতে পারি তাই আউটপুট 4।

ইনপুট - str_1 ="1101", string str_2 ="1101"

আউটপুট - 0 হিসাবে অন্যান্য বাইনারি স্ট্রিং সহ XOR সহ চক্রীয় পারমুটেশনের সংখ্যা হল:1

ব্যাখ্যা - আমরা স্ট্রিং str_2 ব্যবহার করে সেট তৈরি করব এবং সেটটি হবে {1101, 1110, 1011, 0111}। এখন আমরা স্ট্রিং str_1 ব্যবহার করে XOR ক্রিয়াকলাপ সম্পাদন করব এবং গঠিত সেট অর্থাৎ

{1101} ^ 1101 =0

{1110} ^ 1101 সমান নয় 0

{1011} ^ 1101 সমান নয় 0

{0111} ^ 1101 সমান নয় 0

আমরা যেমন করতে পারি আমরা শুধুমাত্র একটি 0 অর্জন করতে পেরেছি তাই গণনা হল 1।

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

  • দুটি বাইনারি স্ট্রিং ইনপুট করুন, আসুন str_1 এবং str_2 বলি এবং পরবর্তী প্রক্রিয়াকরণের জন্য তাদের cyclic_permutation() ফাংশনে পাস করি।
  • ফলাফল সংরক্ষণ করার জন্য একটি অস্থায়ী পরিবর্তনশীল তৈরি করুন এবং str_2 কে str_2 + str_2 হিসাবে সেট করুন এবং তারপর str_2 কে str_2.substr(0, str_2.size()-1 হিসাবে সেট করুন।
  • একটি স্ট্রিং টাইপ ভেরিয়েবল str তৈরি করুন এবং এটিকে str_1 এবং str_2 এর সংমিশ্রণে সেট করুন তারপর স্ট্রিং str এর দৈর্ঘ্য গণনা করুন। স্ট্রিং str এর দৈর্ঘ্যের একটি অ্যারে তৈরি করুন।
  • একটি আর্গুমেন্ট হিসাবে ফাংশনে স্ট্রিং স্ট্র এবং অ্যারে পাস করে ফাংশন চেক() কে কল করুন।
  • ফাংশনের ভিতরে
    • দুটি ভেরিয়েবল শুরু এবং শেষ ঘোষণা করুন এবং তাদের 0 এ সেট করুন
    • স্ট্রিংয়ের দৈর্ঘ্য গণনা করুন।
    • স্ট্রিং -1-এর জন্য i থেকে দৈর্ঘ্য পর্যন্ত লুপ শুরু করুন এবং পরীক্ষা করুন যদি i শেষের চেয়ে বড় তারপর i হিসাবে শুরু করুন এবং i হিসাবে শেষ করুন। এখন শুরু করুন যখন শেষ স্ট্রিং এর দৈর্ঘ্যের চেয়ে কম এবং str[end-start] সমান str[end] এবং শেষের মান 1 দ্বারা বৃদ্ধি করুন
    • এখন arr[i] শেষ হিসাবে সেট করুন - শুরু করুন এবং শেষ 1 দ্বারা হ্রাস করুন
    • অন্যথায়, একটি অস্থায়ী পরিবর্তনশীল টেম্প তৈরি করুন এবং এটিকে i হিসাবে সেট করুন - শুরু করুন এবং IF arr[temp] শেষের চেয়ে কম - i + 1 তারপর arr[i] কে arr[temp] হিসাবে সেট করুন। অন্যথায়, শুরুতে i সেট করুন এবং শুরু করুন যখন একটি স্ট্রিংয়ের দৈর্ঘ্যের চেয়ে কম শেষ করুন এবং str[এন্ড-স্টার্ট] হিসাবে str[এন্ড] তারপর শেষ 1 দ্বারা বৃদ্ধি করুন এবং arr[i] শেষ করুন - শুরু করুন এবং শেষটি 1 দ্বারা হ্রাস করুন .
  • স্টার্ট লুপ FOR i থেকে 1 পর্যন্ত স্ট্রিং str -1 এর দৈর্ঘ্য এবং চেক করুন IF arr[i] স্ট্রিং str_1 এর দৈর্ঘ্যের সমান তারপর গণনা 1 দ্বারা বৃদ্ধি করুন
  • রিটার্ন গণনা
  • ফলাফল প্রিন্ট করুন

উদাহরণ

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

void check(string str, int arr[]) {
   int start = 0, end = 0;
   int len = str.length();

   for (int i = 1; i <= len - 1; i++) {
      if (i > end) {
         start = i;
         end = i;
         while (end < len && str[end - start] == str[end]) {
            end++;
         }
         arr[i] = end - start;
         end--;
      } else {
         int temp = i - start;
         if (arr[temp] < end - i + 1) {
            arr[i] = arr[temp];
         } else {
            start = i;
            while (end < len && str[end - start] == str[end]) {
               end++;
            }
            arr[i] = end - start;
            end--;
         }
      }
   }
}

int cyclic_permutation(string str_1, string str_2) {
   int count = 0;
   str_2 = str_2 + str_2;
   str_2 = str_2.substr(0, str_2.size() - 1);

   string str = str_1 + "$" + str_2;
   int len = str.length();
   int arr[len];
   check(str, arr);

   for (int i = 1; i <= len - 1; i++) {
      if (arr[i] == str_1.length()) {
         count++;
      }
   }
   return count;
}
int main() {
   string str_1 = "1111";
   string str_2 = "1111";
   cout << "Count of cyclic permutations having XOR with other binary string as 0 are: " << cyclic_permutation(str_1, str_2);
   return 0;
}

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে

আউটপুট

Count of cyclic permutations having XOR with other binary string as 0 are: 4

  1. C++ এ বন্ধনী সহ স্ট্রিং করার জন্য বাইনারি ট্রি

  2. C++ এ প্রদত্ত XOR সহ সমস্ত জোড়া গণনা করুন

  3. C++-এ অক্ষরের পুনরাবৃত্তি সহ সমস্ত স্থানান্তর প্রিন্ট করুন

  4. একটি বাইনারি স্ট্রিং-এ C++ তে k দৈর্ঘ্যের সমস্ত পারমুটেশন রয়েছে কিনা তা পরীক্ষা করুন