• 分巧克力



    标题: 分巧克力

    儿童节那天有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;
    }
  • 相关阅读:
    分支可以类型的多态实现
    c#中使用了using自动释放资源,如果在using中被return或者异常终止,也会继续执行dispose函数的
    C# 数组的Clone
    pg_dump备份数据结构及数据
    SpringBoot使用MockMVC单元测试Controller
    Docker连接私服
    Windows安装Docker
    项目启动报错Failed to configure a DataSource: 'url' attribute is not specified and no embedde
    剑指Offer对答如流系列
    剑指Offer对答如流系列
  • 原文地址:https://www.cnblogs.com/zhangshuyao/p/8597418.html
Copyright © 2020-2023  润新知