➤ Problem Link : 1077D. Cutting Out
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
map<int,int> mp;
bool comp(int x,int y)
{
return mp[x]>mp[y];
}
bool func(int cnt,vector<int> v, int k,bool flag)
{
if(!flag)
{
int c=0;
for(int i=0;i<v.size();i++)
{
c+=mp[v[i]]/cnt;
if(c>=k)
return 1;
if(mp[v[i]]<cnt)
return 0;
}
return 0;
}
else
{
for(int i=0;i<v.size();i++)
{
for(int j=1;j<=mp[v[i]]/cnt;j++)
{
k--;
cout<<v[i]<<" ";
if(k==0)
return 1;
}
}
}
return 1;
}
int main()
{
int n,k,v;
cin>>n>>k;
vector<int> s;
for(int i=0;i<n;i++)
{
cin>>v;
s.push_back(v);
}
mp.clear();
for(auto i : s)
mp[i]++;
vector<int> t;
for(auto it : mp)
t.push_back(it.first);
sort(t.begin(),t.end(),comp);
int low = 0,high = 1000000,mid;
while(low<high)
{
mid=low+(high-low+1)/2;
if(func(mid,t,k,0))
low=mid;
else
high=mid-1;
}
func(high,t,k,1);
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
