本文主要是介绍蓝桥集训之分巧克力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
蓝桥集训之分巧克力
-
核心思想:二分
- 若mid边长可以分出来 则<mid边长的也能分出来
- 所以考虑二分 找到最大的边长
- 将所有mid边长能分的个数求和 –> 大于人数则可行
-
#include<iostream>using namespace std;const int N = 100010;typedef long long LL;int h[N],w[N];int n,m;bool check(int mid){LL res = 0;for(int i=0;i<n;i++){res += (LL) h[i]/mid *(w[i]/mid); //求mid边长可分的个数if(res >= m) return true; //大于人数说明够分}return false;}int main(){cin>>n>>m;for(int i=0;i<n;i++) cin>>h[i]>>w[i];int l=1,r = 1e5;while(l<r){int mid = l + r + 1>>1;if(check(mid)) l = mid;else r = mid-1;}cout<<r;}
这篇关于蓝桥集训之分巧克力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!