• 枚举--分巧克力--蓝桥杯--二分法


    问题描述
      儿童节那天有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
    单纯的进行枚举会超时,采用二分法
    每次都比较中间的数字
    如果中间的数字可以满足的话就在大一点
    如果不满足的话就小一点
    最后的出来一个结果
    #include <iostream>
    using namespace std;
    long long h[100001];
    long long w[100001];
    long long k;
    long long N;
    int fen(long long  m)
    {
      long long count=0;
      for(long long i=0;i<N;i++)
      {
          count+=(h[i]/m)*(w[i]/m); 
      }
      if(count>=k)
      return 1;
      else 
      return 0;
        
    }
    int main()
    {
        long  long q=1;
        long long z=100001;
        long long a=1;
    cin>>N;
    cin>>k;
    for(long long i=0;i<N;i++)
    {
    cin>>h[i];
    cin>>w[i];
    }
    
    while(q<=z)
    {
     long long m=(q+z)/2;
        if(fen(m)) //还可以再分 
         {
           q=m+1;
           a=m;
         }
    else
    {           
         z=m-1;
    }    
        
    }
    cout<<a;
    
    return 0;
    }
  • 相关阅读:
    linux系统的nobody用户
    java包命名规则
    配置文件解析
    jps参数
    Java数据类型总结
    JSON与JAVA数据的相互转换
    maven中使用net.sf.json-lib
    设计 REST 风格的 MVC 框架
    Java 5种字符串拼接方式性能比较
    spring获取webapplicationcontext,applicationcontext几种方法详解
  • 原文地址:https://www.cnblogs.com/jweie/p/8361704.html
Copyright © 2020-2023  润新知