zoukankan      html  css  js  c++  java
  • 第八届蓝桥杯第九题:分巧克力(二分查找)

    标题: 分巧克力

        儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。
        小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。

        为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:

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


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

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

    输入
    第一行包含两个整数N和K。(1 <= N, K <= 100000)  
    以下N行每行包含两个整数Hi和Wi。(1 <= Hi, Wi <= 100000) 
    输入保证每位小朋友至少能获得一块1x1的巧克力。   

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

    样例输入
    2 10  
    6 5  
    5 6  

    样例输出:

    2


    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗  < 1000ms

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

    注意:
    main函数需要返回0;
    只使用ANSI C/ANSI C++ 标准;
    不要调用依赖于编译环境或操作系统的特殊函数。
    所有依赖的函数必须明确地在源文件中 #include <xxx>
    不能通过工程设置而省略常用头文件。

    提交程序时,注意选择所期望的语言类型和编译器类型。

    在第一次出现sum<k的时候,上一个数就是最大的边长,利用二分的思想,在1和1e5之间逐渐找到符合标准的边长

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int X=1e6+10;
     4 int h[X],w[X];
     5 int n,k,sum;
     6 int F(int x)
     7 {
     8     sum=0;
     9     for(int i=1;i<=n;i++)
    10     sum=sum+(h[i]/x)*(w[i]/x);
    11     if(sum>=k) return 1;
    12     else return 0;
    13 }
    14 int main()
    15 {
    16     scanf("%d%d",&n,&k);
    17     for(int i=1;i<=n;i++) scanf("%d%d",&h[i],&w[i]);
    18     int l=1,r=100005;
    19     while(l<r-1)
    20     {
    21         int m=(l+r)/2;
    22         if(F(m)) l=m;
    23         else r=m;
    24     }
    25     printf("%d
    ",l);
    26     return 0;
    27 }

  • 相关阅读:
    January 25th, 2018 Week 04th Thursday
    January 24th, 2018 Week 04th Wednesday
    January 23rd, 2018 Week 04th Tuesday
    January 22nd, 2018 Week 04th Monday
    January 21st, 2018 Week 3rd Sunday
    January 20th, 2018 Week 3rd Saturday
    January 19th, 2018 Week 3rd Friday
    January 18th, 2018 Week 03rd Thursday
    January 17th, 2018 Week 03rd Wednesday
    January 16th, 2018 Week 03rd Tuesday
  • 原文地址:https://www.cnblogs.com/Friends-A/p/9309033.html
Copyright © 2011-2022 走看看