分巧克力——蓝桥杯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


      相关文章
      |
      3月前
      |
      算法 Java
      LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
      LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
      52 6
      |
      3月前
      |
      人工智能 算法 Java
      LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
      LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
      50 1
      |
      3月前
      |
      存储 算法 Java
      LeetCode经典算法题:预测赢家+香槟塔java解法
      LeetCode经典算法题:预测赢家+香槟塔java解法
      61 1
      |
      3月前
      |
      算法 Java
      LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
      LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
      54 0
      |
      3月前
      |
      存储 算法 Java
      LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
      LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
      39 0
      |
      5月前
      |
      Java
      2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
      2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
      52 4
      |
      5月前
      |
      Java
      2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
      2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
      50 2
      |
      5月前
      |
      Java
      2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
      2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
      37 1
      |
      5月前
      |
      Java
      八皇后问题92种解法(java)
      八皇后问题92种解法(java)
      |
      5月前
      |
      存储 前端开发 算法
      2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
      2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
      33 0
      下一篇
      无影云桌面