কম্পিউটার

C++ এ বাক্য স্ক্রীন ফিটিং


ধরুন আমাদের কাছে একটি সারি x cols স্ক্রীন রয়েছে এবং একটি বাক্য যা অ-খালি শব্দের তালিকা দ্বারা উপস্থাপিত হয়েছে, তাহলে আমাদের খুঁজে বের করতে হবে যে প্রদত্ত বাক্যটি স্ক্রিনে কতবার লাগানো যাবে। কিছু বৈশিষ্ট্য আছে -

  • একটি শব্দ দুটি লাইনে বিভক্ত হবে না।

  • বাক্যে শব্দের ক্রম পরিবর্তন করা উচিত নয়।

  • দুটি শব্দের মধ্যে একটি মাত্র ফাঁকা থাকবে৷

  • বাক্যটিতে মোট শব্দ সংখ্যা 100 এর বেশি হবে না।

  • প্রতিটি শব্দের দৈর্ঘ্য 0-এর থেকে বেশি কিন্তু 10-এর কম৷

  • 1 ≤ সারি, cols ≤ 20,000৷

সুতরাং যদি ইনপুটটি সারি =3 এবং cols =6 এর মত হয় এবং বাক্যটি [“a”, “bcd”, “e”] হয়, তাহলে আউটপুট হবে 2।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি মানচিত্র ডিপি সংজ্ঞায়িত করুন, ret সেট করুন :=0, n :=বাক্য বিন্যাসের আকার

  • যখন সারিটি 0

    নয়
    • start :=ret mod n, len :=-l এবং cnt :=0

    • যদি dp-এ start উপস্থিত না থাকে, তাহলে

      • যখন 1 + len + বাক্যের আকার[(start + cnt) mod n] <=cols

        • len :=1 + len + বাক্য[(start + cnt) mod n]

        • cnt 1 দ্বারা বাড়ান

      • dp[start] :=cnt

      • ret :=ret + cnt

    • অন্যথায় ret :=ret + dp[start]

    • সারি :=সারি – 1

  • রিটার্ন রিটার্ন/n

উদাহরণ (C++)

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int wordsTyping(vector<string>& sentence, int rows, int cols) {
      unordered_map <int, int> dp;
      int ret = 0;
      int n = sentence.size();
      while(rows--){
         int start = ret % n;
         int len = -1;
         int cnt = 0;
         if(!dp.count(start)){
            while(1 + len + (int)sentence[(start + cnt) % n].size() <= cols){
               len = 1 + len + sentence[(start + cnt) % n].size();
               cnt++;
            }
            dp[start] = cnt;
            ret += cnt;
         }
         else{
            ret += dp[start];
         }
      }
      return ret / n;
   }
};
main(){
   vector<string> v = {"a","bcd","e"};
   Solution ob;
   cout << (ob.wordsTyping(v, 3, 6));
}

ইনপুট

["a","bcd","e"]
3
6

আউটপুট

2

  1. অবশিষ্ট() C++ এ

  2. C++ এ fdim()

  3. C++ এ রেফারেন্স_র্যাপার

  4. C++ প্রোগ্রাম Recursion ব্যবহার করে একটি বাক্যকে বিপরীত করতে