分巧克力——蓝桥杯17年省赛(JAVA解法)

简介: 分巧克力——蓝桥杯17年省赛(JAVA解法)

 题目链接:

题目描述

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

小明一共有 N 块巧克力,其中第ii 块是 Hi×Wi 的方格组成的长方形。为了公平起见,

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

    1. 形状是正方形,边长是整数;
    2. 大小相同;

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

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

    image.gif编辑

    输出描述

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

    输入输出样例

    示例

    输入

    2 10
    6 5
    5 6

    image.gif

    输出

    2

    image.gif

    运行限制

      • 最大运行时间:2s
      • 最大运行内存: 256M

      题目代码:

      import java.util.*;
      public class 分巧克力 {
          static int n=0;
          static int k=0;
          static int [] wi=new int [100010];
          static int [] hi=new int [100010];
          static boolean check(int mid){
              int res=0;
              for(int i=1;i<=n;i++){
                  res+=(wi[i]/mid)*(hi[i]/mid);
              }
              if(res<k){
                  return false;
              }
              return true;
          }
          public static void main(String [] args) {
              Scanner scan = new Scanner(System.in);
              n=scan.nextInt();//n个巧克力
              k=scan.nextInt();//k个朋友
              for(int i=1;i<=n;i++){
                  wi[i]=scan.nextInt();
                  hi[i]=scan.nextInt();
              }
              int l=1;
              int r=10005;
              while(l<=r){
                  int mid=(l+r)/2;
                  if(check(mid)){
                      //如果当前的mid满足可以分给k个小朋友 那么就说明mid的值还可以更大
                      //所以答案再mid的右边
                      l=mid+1;
                  }else{
                      r=mid-1;
                  }
              }
              System.out.println(l-1);
          }
      }

      image.gif


      相关文章
      |
      算法 Java C++
      【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
      本文介绍了经典的0/1背包问题及其动态规划解法。
      478 5
      |
      算法 搜索推荐 Java
      【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
      本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
      625 6
      |
      Java 编译器 程序员
      Java面试高频题:用最优解法算出2乘以8!
      本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
      292 6
      |
      人工智能 算法 Java
      LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
      LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
      225 1
      |
      存储 算法 Java
      LeetCode经典算法题:预测赢家+香槟塔java解法
      LeetCode经典算法题:预测赢家+香槟塔java解法
      251 1
      |
      算法 Java
      LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
      LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
      214 6
      |
      算法 Java
      LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
      LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
      223 0
      |
      存储 算法 Java
      LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
      LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
      209 0
      八皇后问题92种解法(java)
      八皇后问题92种解法(java)
      143 0
      |
      Java
      2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
      2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
      211 1