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

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

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

যদি কার্ডগুলো हों [1,2,3,6,2,3,4,7,8] এবং W = 3, তবে উত্তর হবে true, কারণ এগুলোকে [1,2,3],[2,3,4],[6,7,8] হিসেবে রি-অ্যারেঞ্জ করা যায়।

এটি সমাধান করার জন্য নিচের ধাপগুলি অনুসরণ করুন −

  • একটি ম্যাপ m সংজ্ঞায়িত করুন, এবং হাতে থাকা প্রতিটি উপাদানের ফ্রিকোয়েন্সি m-এ সংরক্ষণ করুন
  • যতক্ষণ হাতের আকার 0 না হয়
    • prev := 0
    • it := m-র প্রথম কি-ভ্যালু পেয়ারের পয়েন্টার
    • i = 0 থেকে W - 1 পর্যন্ত
      • it-এর ভ্যালু 0 হওয়া পর্যন্ত it := পরবর্তী পেয়ার
      • যদি i > 0 && it->first - 1 == prev অথবা i == 0 হয়, তবে
        • it->second 1 কমান
        • prev := it->first
      • অন্যথায় false ফেরত দিন
      • it := পরবর্তী পেয়ার
    • n := n - W
  • true ফেরত দিন

উদাহরণ কোড

#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. প্রসেস কিল করা (Kill Process) C++-এ

  3. স্কোয়ারেল সিমুলেশন (Squirrel Simulation) C++-এ

  4. C++-এ আয়তাকার এলাকা II (Rectangle Area II) সমাধান