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

C++-এ পুনরাবৃত্তির সংখ্যা গণনা (Count The Repetitions)


ধরি আমাদের দুটি খালি নন-স্ট্রিং s1 এবং s2 (সর্বোচ্চ 100 ক্যারেক্টার) এবং দুটি সংখ্যা n1 এবং n2 আছে (0 থেকে 10^6 পর্যন্ত)। এখন ধরি S1 এবং S2, যেখানে S1 = [s1, n1] এবং S2 = [s2, n2]।

S = [s, n] মানে স্ট্রিং S যা s স্ট্রিংটি n বার সংযুক্ত করে তৈরি। উদাহরণ: ["ab", 4] = "abababab"।

দूसरी পাশে, স্ট্রিং s1 কে s2 থেকে কিছু ক্যারেক্টার বাদ দিয়ে পাওয়া যাবে। যেমন "abc" কে "abdbec" থেকে পাওয়া যায়, কিন্তু "acbbe" থেকে পাওয়া যায় না।

আমাদের এমন সর্বোচ্চ পূর্ণসংখ্যা M বের করতে হবে যাতে [S2, M] কে S1 থেকে পাওয়া যায়।

উদাহরণস্বরূপ, s1="acb", n1=4, s2="ab", n2=2 হলে আউটপুট হবে 2।

সমাধানের ধাপসমূহ

  • s2-র প্রতিটি ক্যারেক্টার c এর জন্য:
    • যদি c s1-তে না থাকে, তবে 0 ফেরত।
  • p1 := 0, p2 := 0, mark := 0
  • যখন p1 < s1.length() * n1:
    • c := s2[p2 % s2.length()]
    • যখন (s1[p1 % s1.length()] != c এবং p1 < s1.length() * n1): p1++
    • p2++; p1++
    • যদি p2 % s2.length() == 0:
      • যদি p2 == s2.length(): mark := p1
      • অন্যথায় যদি p1 % s1.length() == mark % s1.length():
        • round := (s1.length() * n1 - p1) / (p1 - mark)
        • p1 := p1 + round * (p1 - mark)
        • p2 := p2 + round * (p2 - s2.length())
  • ফেরত: p2 / s2.length() / n2

প্রোগ্রাম উদাহরণ

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

class Solution {
public:
    int getMaxRepetitions(string s1, int n1, string s2, int n2) {
        for (auto c : s2) {
            if (s1.find(c) == string::npos)
                return 0;
        }
        int p1 = 0, p2 = 0, mark = 0;
        while (p1 < s1.length() * n1) {
            char c = s2[p2 % s2.length()];
            while (s1[p1 % s1.length()] != c && p1 < s1.length() * n1)
                p1++;
            p2++;
            p1++;
            if (p2 % s2.length() == 0) {
                if (p2 == s2.length()) {
                    mark = p1;
                } else if (p1 % s1.length() == mark % s1.length()) {
                    int round = (s1.length() * n1 - p1) / (p1 - mark);
                    p1 += round * (p1 - mark);
                    p2 += round * (p2 - s2.length());
                }
            }
        }
        return p2 / s2.length() / n2;
    }
};

int main() {
    Solution ob;
    cout << (ob.getMaxRepetitions("acb", 4, "ab", 2));
}

ইনপুট

"acb", 4, "ab", 2

আউটপুট

2
  1. বাইনারি ট্রিতে পারফেক্ট স্কয়ার ওজন বিশিষ্ট নোড গণনা C++-এ

  2. C++-এ The Maze II সমস্যা: গোলাপταν গেঁদের ন্যূনতম দূরত্ব

  3. C++-এ মেজ সমস্যা: বল দিয়ে পথ খুঁজে বের করা

  4. N কাটা দিয়ে বৃত্তের টুকরোর সংখ্যা গণনা C++-এ