কম্পিউটার

C++-এ হ্যান্ড অফ স্ট্রেইটস


ধরুন রিমার হাতে একটি কার্ড আছে, পূর্ণসংখ্যার অ্যারে হিসাবে দেওয়া হয়েছে। এখন তিনি কার্ডগুলিকে দলে ভাগ করতে চান যাতে প্রতিটি গ্রুপের আকার W হয় এবং পরপর W কার্ড থাকে। এটা সম্ভব কি না তা আমাদের যাচাই করতে হবে।

সুতরাং যদি কার্ডগুলি [1,2,3,6,2,3,4,7,8] এবং W =3 হয়, তবে উত্তরটি সত্য হবে, কারণ সে তাদের [1,2,3] এর মতো পুনর্বিন্যাস করতে পারে। ,[2,3,4],[6,7,8]

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

  • একটি মানচিত্র m সংজ্ঞায়িত করুন, এবং প্রতিটি উপাদানের ফ্রিকোয়েন্সি হাতে m এ সংরক্ষণ করুন
  • যদিও হাতের মাপ 0
      নয়
    • পূর্ববর্তী :=0
    • এটি :=m-তে প্রথম কী-মানের জোড়ার নির্দেশক
    • আমি 0 থেকে W – 1
        পরিসরে
      • যদিও এটির মান 0, এটি :=পরবর্তী জোড়ার দিকে নির্দেশ করে
      • যদি i> 0 এবং এর কী - 1 =prev বা i =0, তারপর
        • এর মান 1 কমিয়ে দিন
        • পূর্ববর্তী :=এর কী
      • অন্যথায় মিথ্যা ফেরত দিন
      • এটি :=পরবর্তী জোড়ার দিকে নির্দেশ করুন
    • n :=n – W
  • সত্যে ফিরে আসুন।

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool isNStraightHand(vector<int>& hand, int W) {
      map <int, int> m;
      int n = hand.size();
      if(n % W != 0) return false;
      for(int i = 0; i < n; i++){
         m[hand[i]]++;
      }
      while(n){
         map <int, int> :: iterator it = m.begin();
         int prev = 0;
         for(int i = 0; i < W; i++){
            while(it->second == 0) it++;
            if((i > 0 && it->first - 1 == prev) || i == 0){
               it->second--;
               prev = it->first;
            }else{
               return false;
            }
            it++;
         }
         n -= W;
      }
      return true;
   }
};
main(){
   vector<int> v = {1,2,3,6,2,3,4,7,8};
   Solution ob;
   cout << (ob.isNStraightHand(v, 3));
}

ইনপুট

[1,2,3,6,2,3,4,7,8]
3

আউটপুট

1

  1. C++ এ ডায়াগোনাল ট্রাভার্স II

  2. C++ এ কিল প্রসেস

  3. C++ এ কাঠবিড়ালি সিমুলেশন

  4. C++ এ আয়তক্ষেত্র ক্ষেত্র II