其他分享
首页 > 其他分享> > CodeForces - 1701C

CodeForces - 1701C

作者:互联网

Problem - C - Codeforces

题意: 每个位置对应一种适合的工人,适合的工人工作消耗1h,不适合2h,每个工人不能同时工作多个机器,问将所有机器工作完毕的最小时间是多少。

题解: 二分,对于mid, 判断比他小的和比他大的,然后判断两者之间的大小关系即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=2e5+10;
ll a[N];  
signed main(){
   ios::sync_with_stdio(false);
   cin.tie(0);cout.tie(0);
   ll t;cin>>t;
   while(t--){
      ll n,m;cin>>n>>m;
      vector<ll> sum(n+1,0);
      for(ll i=1;i<=m;i++){
         ll p;cin>>p;sum[p]++;
      }
      ll l=1,r=1e9;
      while(l<r){
         ll mid=l+r>>1;
         ll p=0,q=0;
         for(ll i=1;i<=n;i++){
            if(mid<sum[i]) p+=sum[i]-mid;//需要几个人代替
            else if(mid>=sum[i]) q+=(mid-sum[i])/2;//把不适合的人顶替上
         }
         if(q>=p){
            r=mid;
         }
         else l=mid+1;
      }
      cout<<l<<endl;
   }
} 

 

标签:mid,1701C,sum,适合,cin,long,CodeForces,ll
来源: https://www.cnblogs.com/hhzp/p/16497414.html