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>
    不能通过工程设置而省略常用头文件。

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

    #include<math.h>
    #include<iostream>
    using namespace std;
    int main()
    {
        int n,k;
        cin>>n>>k;
        int a[n][2];
        int i,j;
        int sum[n];//每个巧克力的面积 
        int s=0;//面积之和 
        for(i=0;i<n;i++)
        {
            for(j=0;j<2;j++)
            {
                cin>>a[i][j];
                
            }
            sum[i]=a[i][0]*a[i][1]; 
            s+=sum[i]; 
        }
        int t;//理想的边长
        t=sqrt(s/k);
        int m; 
        for(m=t;m>=1;m--)// 边长递减 
        {
            int num=0;//已分好的个数
            for(i=0;i<n;i++)//遍历每块巧克力 
          {
            num+=(a[i][0]/m)*(a[i][1]/m); 
            //cout<<m<<' '<<num<<endl;
          }
            if(num>=k)    
            {
              cout<<m<<endl;
              return 0;    
            }
        } 
        return 0;
    }
  • 相关阅读:
    Linux上面执行 Windows 命令(比如 重启服务)的简单方法
    Linux 通过cksum 来判断文件是否是相同
    Linux 根据端口快速停止服务并启动的办法
    Delphi控件开发浅入深出(三)
    Delphi 资源文件( .res)
    C++中模块(Dll)对外暴露接口的方式
    delphi Align属性
    cport串口控件的应用
    两款工控控件对比评测:Iocomp和ProEssentials
    Android 将ARGB图片转换为灰度图
  • 原文地址:https://www.cnblogs.com/zhangshuyao/p/8597418.html
Copyright © 2011-2022 走看看