题意:讲n个木棒,变为长度相同的k个木棒,然后问木棒最长长度为多少?
题解:二分枚举答案,然后遍历整个数组判断是否可以满足k
时间复杂度:
#include<bits/stdc++.h> using namespace std; int main() { long long s; int i,t,N,K,M,L,R,T[200005]; scanf("%d%d",&N,&K); R=-1; for(i=0;i<N;i++){scanf("%d",&T[i]);R=max(R,T[i]);} L=1; while(L<=R) { M=(R+L)>>1; for(s=i=0;i<N;i++)s+=T[i]/M; if(s>=K)L=M+1,t=M; else R=M-1; } printf("%d\n",t); }