1. 题目

标题: 分巧克力

儿童节那天有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

不能通过工程设置而省略常用头文件。

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

2. 分析

2.1 如何理解题意

一个x*y的巧克力能分多少块正方形出来,这其实是很简单的问题。我们很容易发现:

①对于一个矩形,能分离的最大的正方形的变长取决于该矩形最小的边长。

②在①的基础上,缩小边长能分出更多的巧克力,但他们拼起来肯定不会超过最大的那个正方形。

我们还是用图来解释,假设有一个2*3的巧克力:

那么能分出最大的巧克力显然是2*2,也就是2*3中最短边“2”作为边长的正方形,再往下分,1*1的巧克力显然是基于原本最大的2*2正方形分割而来的。

进而,我们能很容易的发现,对任意x*y的巧克力,能够分出边长为i的正方形的小巧克力的数量为:(x/i)*(y/i),这里利用整型除法向下取整的特性。举个例子,5*6的巧克力,当i=2时,一共能分出(5/2)*(6/2)=2*3=6块巧克力;i=3时,一共能分出(5/3)*(6/3)=1*2=2块巧克力。

2.2 怎么选取最大的巧克力边长

输入n组数据,每组有两个边长,那么根据我们上面的结论,只需要做一个for循环,并使i从1至maxShortSide,其中maxShortSide就是在n组数据中最大的短边。

那么,我们只需对每一个i,分别对n组数据(巧克力)计算可以分出的总数量并相加,若大于k则符合要求并记录,然后再使i++,若此时不能满足总数大于k,则上一个i就是能分出来的最大边长的巧克力。这里注意的是,只要总数大于k就可以停止相加,即使程序还未遍历n组数据。这样的设计可以优化时间量度,避免TLE。

3. 程序

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include

8 #include

9 #include

10 #include

11 #include

12 #include

13 using namespacestd;14

15 #define DEBUG 1  //DEBUG为1,则需要在第23行更改输入的文件名

16

17

18 intmain() {19 setst;20 longn, k;21 long currentMax=0, maxShortSide=0; //int类型也行,看题目的规模22 #if DEBUG

23 ifstream fin( "in7.txt" ,ios::in);24 fin >> n >>k;25 #else

26 cin >> n >>k;27 #endif

28 long chocolate[n][2];29 for (int i=0; i

31 fin >> chocolate[i][0] >> chocolate[i][1];  //从文件导入测试数据32 #else

33 cin >> chocolate[i][0] >> chocolate[i][1];  //控制台输入数据34 #endif

35 if (maxShortSide < min(chocolate[i][0],chocolate[i][1])) {36 maxShortSide = min(chocolate[i][0],chocolate[i][1]);  //寻找maxShortSide的值37 }38 }39 for (long i=1; i<=maxShortSide; i++) {40 int sum = 0;41 for (long j=0; j= k) break;  //若相加后大于小朋友的数量k,则直接退出循环,因为数量已经满足题目需求44 }45 if (sum >= k && i >currentMax) { //当总数大于小朋友数量且新的i比旧的cunrrentMax还要大,则更新currentMax46 currentMax =i;47 }48 else if (sum

4. 运行结果

时间明显少于限制时间,故未记录运行时间

c语言程序设计分巧克力,[蓝桥杯训练] 第八届(2017)省赛 C/C++ A组 T09 - 分巧克力...相关推荐

  1. [蓝桥杯训练] 第八届(2017)省赛 C/C++ A组 T01 - 迷宫

    1. 题目 X星球的一处迷宫游乐场建在某个小山坡上. 它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母. 我们假设玩家是面朝上坡的方向站立,则: L表示走到左边的房间, R表示 ...

  2. 第十届蓝桥杯大赛软件类省赛 JAVA 大学 A 组

    迷宫 本题总分:10 分 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为左 ...

  3. 第十届蓝桥杯大赛软件类省赛Java大学B组 试题 G: 外卖店优先级

    时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分 [问题描述] "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店都有 一个优先级,初始时 ...

  4. 振兴中华(蓝桥杯13年第四届省赛真题 JAVA-B组)

    思路:因为只能横向或纵向跳到相邻的格子里,所以到'华'字有两种方法:①从左边的中横向跳过来 ②从上边的中纵向跳过来 直接递推即可. 标题: 振兴中华 小明参加了学校的趣味运动会,其中的一个项目是:跳格 ...

  5. 蓝桥杯第十届省赛java组解析(灵能传输 四星难度,后缀表达式 两星难度)

    第一题太简单懒得复制题目了 答案是:490 第二题: 试题 B: 不同子串 本题总分:5 分 [问题描述] 一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串.例如,字符串aa ...

  6. c语言上机指导实验7,[C语言程序设计上机指导与同步训练(刘迎春张艳霞)]实验7.pdf...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 [C语言程序设计上机指导与同步训练(刘迎春张艳霞 ...

  7. AI:互联网程序设计竞赛之蓝桥杯大赛的简介、奖项设置、大赛内容以及蓝桥杯与ACM(ICPC)的四个维度对比之详细攻略

    AI:互联网程序设计竞赛之蓝桥杯大赛的简介.奖项设置.大赛内容以及蓝桥杯与ACM(ICPC)的四个维度对比之详细攻略 导读: 蓝桥杯属于互联网程序设计竞赛的一种,除了它之外,类似的比赛还有ICPC(A ...

  8. 【算法练习】蓝桥杯训练一:区间k大数查询、最大最小公倍数、k好数

    蓝桥杯训练一 一.区间k大数查询(简单)(模拟) 二.最大最小公倍数(中等)(数论) 三.k好数(DP) 一.区间k大数查询(简单)(模拟) 直接模拟就可以,个人觉得题目不严谨,没有说重复元素,也没有 ...

  9. 第九届蓝桥杯大赛软件类国赛

    文章目录 第九届蓝桥杯大赛软件类国赛 国赛C++ A组 三角形面积 阅兵方阵 找假币 约瑟夫环 -- important 自描述序列 -- todo 采油 -- todo 国赛C++ B组 换零钞 激 ...

最新文章

  1. 从CUDA开始读OpenCL
  2. Bootstrap3 弹出提示插件的选项
  3. 从VC++ 6.0 MSDEV到Visual Studio 2017的过渡阶段
  4. 移远EC20串口使用阻塞问题
  5. 74HC138译码器的原理和使用
  6. 粒子群算法python_用Python实现粒子群算法(PSO)
  7. 前端三大主流框架如何去选择?
  8. 细说共模干扰和差模干扰(四个腿的电感是什么?有什么作用?)
  9. Android之制作Nine-Patch图片
  10. 硬件第二节 MOS管电路工作原理及详解
  11. wordpress 上传图片时提示“无法建立目录wp-content/uploads/2019/03。有没有上级目录的写权限?
  12. win7磁盘清理_Win7系统使用久变慢怎么办?Windows7系统优化方法
  13. COMPILATION ERROR
  14. 【问题记录】Parallels Desktop黑屏无法进入Windows系统
  15. uniapp实现生成海报功能
  16. CentOS8 图形界面和命令行切换
  17. python之无限浏览网页
  18. java获取当前时间戳
  19. 深度解析京东个性化推荐系统
  20. PTA - 电话聊天狂人

热门文章

  1. SQLserver中触发器常用语句
  2. ABAP 使用指针动态分配字段
  3. Brook+ Programming (2)
  4. 动态短视频壁纸多功能情侣头像,套图等功能微信小程序源码下载
  5. android 4.4官方下载,android x86 4.4 iso下载_android x86 4.4 iso官方下载-太平洋下载中心...
  6. U3D技术Class1
  7. 小程序技术未来发展的思考:低代码演进和创新应用
  8. 【牛客小白月赛69】题解与分析A-F【蛋挞】【玩具】【开题顺序】【旅游】【等腰三角形(easy)】【等腰三角形(hard)】
  9. 基于Restful+JQuery的五子棋对战游戏开发
  10. 机器人总动员片尾曲歌词_英语歌曲 ||《机器人总动员》Put on Your Sunday Clothes