কম্পিউটার

C++ এ প্রতিটি ধাঁধার জন্য বৈধ শব্দের সংখ্যা


ধরুন একটি ধাঁধার স্ট্রিং আছে, একটি শব্দ বৈধ যদি নিম্নলিখিত উভয় শর্তই বৈধ হয় −

  • শব্দে ধাঁধার প্রথম অক্ষর রয়েছে।

  • শব্দের প্রতিটি অক্ষরের জন্য, সেই অক্ষরটি ধাঁধায়।

ধরুন আমরা যদি একটি উদাহরণ বিবেচনা করি যে, যদি ধাঁধাটি "abcdefg" এর মতো হয়, তাহলে বৈধ শব্দগুলি হল "মুখ", "বাঁধাকপি" ইত্যাদি; কিন্তু কিছু অকার্যকর শব্দ "বিফড" কারণ সেখানে "a" এবং "ভিত্তিক" নেই কারণ "s" আছে যা ধাঁধার মধ্যে নেই।

আমাদের উত্তরের তালিকা খুঁজে বের করতে হবে, যেখানে উত্তর[i] হল প্রদত্ত শব্দ তালিকার শব্দের সংখ্যা যা ধাঁধার ধাঁধা[i] এর ক্ষেত্রে বৈধ।

সুতরাং, যদি ইনপুট শব্দের মত হয় =["aaaa","asas","able","ability","actt","Actor","access"], ধাঁধা =["aboveyz","abrodyz", "abslute","absoryz","actresz","gaswxyz"], তাহলে আউটপুট হবে [1,1,3,2,4,0], "aboveyz" এর জন্য একটি বৈধ শব্দ হিসাবে :"aaaa", একটি "abrodyz" এর জন্য বৈধ শব্দ:"aaaa", "abslute" এর জন্য তিনটি বৈধ শব্দ :"aaaa", "asas", "able", "absoryz" এর জন্য দুটি বৈধ শব্দ:"aaaa", "asas", চারটি বৈধ শব্দ "actresz" এর জন্য :"aaaa", "asas", "actt", "access" এবং "gaswxyz" এর জন্য কোনো বৈধ শব্দ নেই কারণ তালিকার কোনো শব্দে 'g' অক্ষর নেই।

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

  • একটি ফাংশন getMask() সংজ্ঞায়িত করুন, এটি s,

    লাগবে
  • মুখোশ :=0

  • আরম্ভ করার জন্য i :=0, যখন i

    • মুখোশ :=মাস্ক বা 2^(s[i] - 'a' এর ASCII)

  • ফেরত মাস্ক

  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

  • একটি অ্যারে উত্তর সংজ্ঞায়িত করুন

  • একটি মানচিত্র m

    সংজ্ঞায়িত করুন
  • আরম্ভ করার জন্য i :=0, যখন i

    • শব্দ :=w[i]

    • মুখোশ :=0

    • j শুরু করার জন্য :=0, যখন j <শব্দের আকার, আপডেট (j 1 দ্বারা বাড়ান), do−

      • মাস্ক :=মাস্ক বা গেটমাস্ক(w[i])

    • (m[মাস্ক] 1 দ্বারা বাড়ান)

  • আরম্ভ করার জন্য i :=0, যখন i

    • শব্দ :=p[i]

    • মুখোশ :=getMask(শব্দ)

    • প্রথম :=2^(শব্দ[0] - 'a' এর ASCII)

    • বর্তমান :=মাস্ক

    • তাপমাত্রা :=0

    • বর্তমান> 0, −

      করার সময়
      • যদি বর্তমান এবং প্রথম অ-শূন্য হয়, তাহলে −

        • বর্তমান :=(বর্তমান - 1) এবং মুখোশ

    • উত্তরের শেষে তাপমাত্রা সন্নিবেশ করুন

  • উত্তর ফেরত দিন

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
typedef long long int lli;
class Solution {
   public:
   lli getMask(string s){
      lli mask = 0;
      for(int i =0;i<s.size();i++){
         mask|= 1<<(s[i]-'a');
      }
      return mask;
   }
   vector<int> findNumOfValidWords(vector<string>& w, vector<string>& p) {
      vector <int> ans;
      map <lli, lli > m;
      for(int i =0;i<w.size();i++){
         string word = w[i];
         lli mask = 0;
         for(int j =0;j<word.size();j++){
            mask|= getMask(w[i]);
         }
         m[mask]++;
      }
      for(int i = 0; i<p.size();i++){
         string word = p[i];
         lli mask = getMask(word);
         lli first = 1<<(word[0]-'a');
         lli current = mask;
         lli temp = 0;
         while(current>0){
            if(current & first)temp+=m[current];
            current = (current-1)&mask;
         }
         ans.push_back(temp);
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<string> v = {"aaaa","asas","able","ability","actt","actor","access"};
   vector<string> v1 = {"aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"};
   print_vector(ob.findNumOfValidWords(v,v1));
}

ইনপুট

{"aaaa","asas","able","ability","actt","actor","access"},
{"aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"}

আউটপুট

[1, 1, 3, 2, 4, 0, ]

  1. হেক্সাডেসিমেল থেকে দশমিকের জন্য C++ প্রোগ্রাম

  2. C++ এ জটিল সংখ্যার জন্য atan() ফাংশন?

  3. সি++ এ জটিল সংখ্যার জন্য asin() ফাংশন?

  4. C++ এ জটিল সংখ্যার জন্য acos() ফাংশন?