Computer >> Máy Tính >  >> Lập trình >> C ++

X of a Kind trong Deck of Cards trong C ++

Giả sử chúng ta có một bộ bài, mỗi quân bài có ghi một số nguyên trên đó. Ta phải kiểm tra xem có thể chọn X> =2 sao cho có thể chia toàn bộ bộ bài thành 1 hoặc nhiều nhóm thẻ, trong đó điều kiện sau thỏa mãn:Mỗi nhóm có đúng X số thẻ. Tất cả các thẻ trong mỗi nhóm có cùng một số.

Vì vậy, nếu đầu vào giống như deck =[1,2,3,4,4,3,2,1], thì đầu ra sẽ là True, vì các phân vùng có thể là [1,1], [2,2], [3,3], [4,4].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một bản đồ mp
  • cho tất cả x trong bộ bài
    • (tăng mp [x] lên 1)
  • cho tất cả cặp khóa-giá trị x trong mp
    • ans:=gcd of (ans và giá trị của x)
  • trả về true khi ans> 1, ngược lại là false

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool hasGroupsSizeX(vector<int>& deck) {
      unordered_map<int, int> mp;
      int ans;
      for (auto x : deck)
         mp[x]++;
      for (auto x : mp)
         ans = __gcd(ans, x.second);
      return (ans > 1);
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,4,3,2,1};
   cout << (ob.hasGroupsSizeX(v));
}

Đầu vào

{1,2,3,4,4,3,2,1}

Đầu ra

1