Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

X of a Kind ในสำรับไพ่ใน C++


สมมติว่าเรามีสำรับไพ่ ไพ่แต่ละใบมีเลขจำนวนเต็มเขียนอยู่ เราต้องตรวจสอบว่าเราสามารถเลือก X>=2 ได้หรือไม่ เพื่อให้สามารถแบ่งไพ่ทั้งสำรับออกเป็น 1 กลุ่มขึ้นไป โดยที่เงื่อนไขต่อไปนี้เป็นไปตาม:แต่ละกลุ่มมีจำนวนไพ่ X เท่ากัน ไพ่ทุกใบในแต่ละกลุ่มมีเลขเท่ากัน

ดังนั้น ถ้าอินพุตเหมือนสำรับ =[1,2,3,4,4,3,2,1] ผลลัพธ์จะเป็น True เนื่องจากพาร์ติชั่นที่เป็นไปได้คือ [1,1],[2,2], [3,3],[4,4].

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดหนึ่ง mp mp
  • สำหรับ x ทั้งหมดในสำรับ
    • (เพิ่ม mp[x] ขึ้น 1)
  • สำหรับคู่คีย์-ค่าทั้งหมด x ใน mp
    • ans :=gcd ของ (และค่าของ x)
  • คืนค่า จริง เมื่อ ans> 1 มิฉะนั้น เท็จ

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#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));
}

อินพุต

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

ผลลัพธ์

1