একটি তাশের বান্ডেল দেওয়া আছে, প্রতিটি কার্ডে একটি পূর্ণসংখ্যা লেখা আছে। আমাদের চেক করতে হবে X >= 2 এমন আছে কিনা যাতে পুরো বান্ডেলকে ১ বা অধিক গ্রুপে ভাগ করা যায়, যেখানে প্রতিটি গ্রুপে ঠিক X枚 কার্ড থাকে এবং প্রতিটি গ্রুপের সব কার্ডের নম্বর একই থাকে।
ইনপুট deck = [1,2,3,4,4,3,2,1] হলে আউটপুট True, কারণ পার্টিশন: [1,1],[2,2],[3,3],[4,4]।
সমাধানের ধাপসমূহ
- একটি ম্যাপ mp সংজ্ঞায়িত করুন
- সব x ∈ deck এর জন্য mp[x]++ করুন
- সব key-value pair x ∈ mp এর জন্য ans := gcd(ans, x.second)
- ans > 1 হলে true, অন্যথায় false রিটার্ন করুন
উদাহরণ
#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);
}
};
int 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