P8647 [蓝桥杯 2017 省 AB] 分巧克力 二分 普及-
赤裸二分
#include<iostream> #include<cmath> using namespace std; const int N=100010; int k,n,m=0; int cho[N][2]; bool check(int mid) { int cot=0; for(int i=1;i<=n;i++){ cot+=(cho[i][0]/mid)*(cho[i][1]/mid); if(cot>=k) return true; } return cot>=k; } int binary_search() { int l=1,r=m; while(l<r) { int mid=(l+r+1)/2; if(check(mid)) l=mid; else r=mid-1; } return l; } int main() { scanf("%d %d",&n,&k); for(int i=1; i<=n; i++) { scanf("%d %d",&cho[i][0],&cho[i][1]); m=max(cho[i][0],m); m=max(cho[i][1],m); } cout<<binary_search(); return 0; }