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

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 struct cho  //存储每个巧克力的长和宽 
     5 {
     6     int h;
     7     int w;
     8 };
     9 
    10 int n,k;    //n是巧克力数,k是小朋友的个数 
    11 
    12 const int N=100005;
    13 
    14 cho c[N];
    15 
    16 bool judge(int len)
    17 {
    18     int sum=0; 
    19     for(int i=1;i<n;i++)    //把1到n块巧克力可以分的数目加起来和小朋友总数对比 
    20     {
    21         sum+=(c[i].h/len)*(c[i].w/len);
    22         if(sum>=k)
    23         {
    24             return true;
    25         }
    26     }
    27     return false;
    28 }
    29 
    30 int main()
    31 {
    32     freopen("input.txt","r",stdin);
    33     scanf("%d%d",&n,&k);
    34     for(int i=0;i<n;i++)
    35     {
    36         scanf("%d%d",&c[i].h,&c[i].w);
    37     }
    38     
    39     int low=0;
    40     int high=100005;
    41     
    42     int mid;
    43     
    44     while(low<high-1)
    45     {
    46         mid = (low + high)/2;
    47         
    48         if(judge(mid))
    49             low=mid;
    50         else
    51             high=mid;
    52     }
    53     printf("%d
    ",mid);
    54     
    55     return 0;   
    56 }
  • 相关阅读:
    深入探索迭代器(续)
    深入探索迭代器
    C++ 容器的综合应用的一个简单实例——文本查询程序
    multimap 和 multiset 类型
    set 类型
    map 类型
    关联容器
    Ajax请求成功, 但进不去success方法
    springboot指定配置文件启动项目
    新测可用IntelliJ IDEA 2020.1 for mac
  • 原文地址:https://www.cnblogs.com/WindSun/p/10566505.html
Copyright © 2011-2022 走看看