经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
分巧克力(刷题赛)
来源:cnblogs  作者:jesee_smith  时间:2022/1/18 14:05:11  对本文有异议

reference

  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. /*使得将巧克力按照边长maxX进行切分
  5. ,切分成的份数要大于等于K,
  6. 而如果按照maxX+1进行切割
  7. ,将不再能够切出K块。
  8. 如果从1-100000逐个查找,那么肯定超时,所以采用二分查找。
  9. */
  10. int n,k,a[11000],b[110000];//a 4 high ,b 4 wide
  11. bool ok(int x){
  12. int cnt=0;
  13. for (int i = 1; i <= n; i ++ ){
  14. cnt+=(a[i]/x)*(b[i]/x);//可以切割成的边长合理的正方形巧克力的块数
  15. if(cnt>=k){
  16. return true;
  17. }
  18. }
  19. return false;
  20. }
  21. int main()
  22. {
  23. cin >> n >> k;
  24. for(int i = 1;i <= n;i++){
  25. cin >> a[i]>>b[i];
  26. }
  27. int l = 0,r = 100000;
  28. while(l<=r){
  29. int m = l/2+r/2;
  30. if(ok(m)){
  31. l=m+1;
  32. }else{
  33. r=m-1;
  34. }
  35. }
  36. cout<<l-1<<endl;
  37. return 0;
  38. }

题目描述
儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。

小明一共有 NN 块巧克力,其中第 ii 块是 H_i \times WiH
i
?
×Wi 的方格组成的长方形。为了公平起见,

小明需要从这 NN 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:

形状是正方形,边长是整数;

大小相同;

例如一块 6x5 的巧克力可以切出 6 块 2x2 的巧克力或者 2 块 3x3 的巧克力。

当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?

输入描述
第一行包含两个整数 N,KN,K (1 \leq N, K \leq 10^51≤N,K≤10
5
)。

以下 N 行每行包含两个整数 H_i,W_iH
i
?
,W
i
?
(1 \leq H_i, W_i \leq 10^51≤H
i
?
,W
i
?
≤10
5
)。

输入保证每位小朋友至少能获得一块 1x1 的巧克力。

输出描述
输出切出的正方形巧克力最大可能的边长。

输入输出样例
示例
输入

2 10
6 5
5 6
copy
输出

2
copy
运行限制
最大运行时间:1s
最大运行内存: 256M

本文由博客一文多发平台 OpenWrite 发布!

原文链接:http://www.cnblogs.com/jeseesmith/p/15817446.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号