CodeForces - 1701C
作者:互联网
题意: 每个位置对应一种适合的工人,适合的工人工作消耗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