Samkit5025

Untitled

Aug 30th, 2022
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long int check(map<long long int,long long int> &hm,long long int n,long long int mid){
  5.  
  6.     long long int workers = 0;
  7.     long long int tasks = 0;
  8.  
  9.     for(int i=1;i<=n;i++){
  10.         if(hm[i]>mid){
  11.             tasks+=(hm[i]-mid);
  12.         }
  13.         else{
  14.             workers+=((mid-hm[i])/2);
  15.         }
  16.     }
  17.     return workers>=tasks;
  18. }
  19.  
  20. int minimumDaysForCharity(long long int n,long long int m, vector<long long int> &a){
  21.    
  22.     map<long long int,long long int > hm;
  23.  
  24.     for(int i=1;i<=n;i++){
  25.         hm[i] = 0;
  26.     }
  27.  
  28.     for(int i=0;i<m;i++){
  29.         hm[a[i]]++;
  30.     }
  31.  
  32.     long long int start =0;
  33.     long long int end = 1e12;
  34.     long long int ans = 0;
  35.  
  36.     while(start<=end){
  37.         long long int mid = (start+end)/2;
  38.  
  39.         if(check(hm,n,mid)){
  40.             ans = mid;
  41.             end = mid-1;
  42.         }
  43.         else{
  44.             start = mid+1;
  45.         }
  46.     }
  47.     return ans;
  48. }
  49.  
  50. signed main() {
  51.     long long int N;
  52.     long long int M;
  53.     cin>>N>>M;
  54.  
  55.     vector<long long int> S(M);
  56.     for(int i=0;i<M;i++){
  57.         cin>>S[i];
  58.     }
  59.     cout<<minimumDaysForCharity(N,M,S)<<endl;
  60. }
  61.  
Advertisement
Add Comment
Please, Sign In to add comment