蓝桥杯2017届C++B组省赛真题 分巧克力

2023-11-13

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

分析:

这道题猛地一看挺简单的,不就是找到一个最大边长嘛,我倒着枚举边长,累加在此边长下的所有大巧克力可以切得的小巧克力的个数,然而……62分

62分的代码:

#include<iostream>
using namespace std;
const int MAX_N = 100000;
int N,K;
int Q[MAX_N][2];
int main(){
	cin >> N >> K;
	for(int i = 0;i < N;i++){
		cin >> Q[i][0] >> Q[i][1];
	}
	for(int len = N;len >= 1;len--){//枚举边长
		int cnt = 0;
		for(int i = 0;i < N;i++){
			cnt += (Q[i][0]/len) * (Q[i][1]/len);
		}
		if(cnt >= K){
			cout << len;
			return 0;
		}
	}
} 

想想也知道这么简单的题会放在这?!当然不会

所以面对数据量过大的问题,我们该如何优化呢?

面对枚举问题的优化,我们可以用二分法来解决

满分代码: 

#include<iostream>
using namespace std;
const int MAX_N = 100000;
int N,K;
int Q[MAX_N][2];

bool isOk(int len){
	int cnt = 0;
	for(int i = 0;i < N;i++){
		cnt += (Q[i][0]/len) * (Q[i][1]/len);
	}
	if(cnt >= K){
		return true;
	}
	return  false;
}
int main(){
	cin >> N >> K;
	for(int i = 0;i < N;i++){
		cin >> Q[i][0] >> Q[i][1];
	}
	int l = 1;
	int r = MAX_N;
	int ans = 0;
	while(l <= r){
		int mid = (l+r)/2;
		if(isOk(mid)){//如果这种长度可以的话,我就可以继续去试探更大的 
			ans = mid;
			l = mid+1;
		}else{//如果这种长度不可以的话,我就只能去寻找更小的 
			r = mid-1;
		}
	}
	cout << ans;
	return 0;
} 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯2017届C++B组省赛真题 分巧克力 的相关文章

随机推荐

  • 如何在Windows PowerShell中获取当前的用户名?

    本文翻译自 How do I get the current username in Windows PowerShell 如何在Windows PowerShell中获取当前的用户名 1楼 参考 https stackoom com qu
  • 第一章 Centos7.5介绍与安装部署-centos7.5知识

    一 历史发展 Linux 操作系统的鼻祖Unix 肯 汤姆逊和丹尼斯 里 奇于1969年在贝尔实验室建立了Unix操作系统 一款同时支持多人登录的操作系统 为了开发此系统他们发明了C语言 并于1983年俩人获得了图灵奖 GNU社区的建立 1
  • docker(二)基础命令

    一 docker命令 镜像 1 查看docker版本 docker v docker version decker info 可以查看所有运行容器的镜像数量 运行容器的版本 可以分配的CPU 总的内存等信息 docker的工作目录 var
  • 计算机网络期末复习总结大全(持续更新中)

    计算机网络知识点总结大全 第一章 概述 知识点1 第一次理论课 互联网的两个基本特点 联通性和资源共享 互联网 多个网络通过一些路由器相互连接起来 构成一个覆盖范围更大的计算机网络 即互联网 互联网不等于互连网 1969年ARPANET诞生
  • robot framework 使用四:分层设计和截图以及注意事项

    再说一下目前的主要环境信息和版本 操作系统 win7 64位 python版本 2 7 6 RIDE版本 1 2 3 selenium2library 1 5 0 selenium 2 40 0 pip 1 5 4 setuptools 0
  • 数值计算笔记之数值积分(一)

    目录 0 引言 一 数值积分的积分思想 1 中矩形公式 2 梯形公式 3 辛普森公式 二 求积公式的余项和代数精度 三 插值型求积公式 四 牛顿 柯特斯公式 N C公式 五 复化求积法 1 复化梯形公式 2 复化辛普森公式 要求 n 为偶数
  • 小米解bl锁跳过168小时_xiaomi redmi 红米秒解BL工具分享支持小米红米机型秒解BL跳过168小时

    目前小米的新机 官方风控都默认绑定7天也就是168小时才能解锁BL 部分账号需要绑定15天才能满足条件 导致很多爱玩机的小伙伴被拒门外 并不是所有人都愿意等待官方解锁时候 而跳过168小时解锁 也成为了很多小伙伴希望的事情 本工具来自ROM
  • python程序调优:替换pandas包的Series与DataFrame构造与计算

    在实际部署的时候 使用dataframe的计算效率明显低于numpy 因此在程序中大量运行时避免使用pandas Series与pandas DataFrame及频繁的构造 避免 替换的方法如下 使用numpy ndarry替换pandas
  • 刷题之旅第39站,CTFshow 红包题目8

    感谢ctf show平台提供题目 下载压缩包 看到了两个文件 使用010editor 打开mima png 在末尾处发现 kobe code 这里附上 Admin师傅提供的kobe code对照图 对应着解出来了压缩包密码 OAEBEYTK
  • 单目标跟踪Siam

    一 关于单目标跟踪 本人不了解传统的相关滤波法 所有想法总结仅仅建立在深度学习的基础上 对于单目标跟踪而言一般的解释都是在第一帧给出待跟踪的目标 在后续帧中 tracker能够自动找到目标并用bbox标出 关于SOT single obje
  • 2022年哪些前端技术点会火

    转载于 2022年哪些前端技术点会火 扫地盲僧 原创不易 文章质量很高 个人留存 希望大家支持原作者 2022 年什么会火 什么该学 本文正在参与 聊聊 2022 技术趋势 征文活动 前段时间我发布了一篇关于 2022年前端行业技术发展趋势
  • Caffe (2) SyncedMemory内存管理机制

    在Caffe中 blob是对于上层空间的数据管理存储对象 对于上层来说的话 大部分时候是直接取blob对象的指针来用 如果不考虑GPU的情况下 实际上很简单 就是返回指针就行 但是问题是通常的数据是在GPU和CPU上同时存在 需要两个数据在
  • PLSQL新建用户

    一 打开PLSQL 一般默认用户名 system 密码 二 右侧列表找到Users 右键新建 三 创建用户 名称 口令自定义 剩下的按图 四 角色权限创建connect resource dba 点击应用 五 重新用新账号和口令登陆PLSQ
  • redis的Cacheable注解介绍

    1 引入依赖
  • Webpack 5 新特性

    Webpack 5 在2020年10月正式发布 更新的内容比较多 我们从头梳理下本次更新的核心内容 文章目录 一 构建优化 1 Tree Shaking 删除无用代码 2 合并模块 concatenateModules 3 副作用 side
  • 制度汇编格式怎么生成目录_怎么用word制作标书?大神般操作经验在这里

    怎么用word制作标书 word制作标书是每一个制作标书的制标员 如何用我们常用的办公软件来制作标书呢 除了将必要的材料编写入里面 还需要注意格式 字体等固定排版问题 如果你还是一枚制作标书的新人 请一起来和保标招标网小编学习怎么用word
  • python常用内置库时间,日期与JSON转换

    日期与时间 datetime是Python处理日期和时间的标准库 from datetime import datetime if name main cur date datetime now print cur date print c
  • jenkins使用root账号

    1 修改配置文件 编辑配置文件 vim etc sysconfig jenkins 修改 JENKINS USER JENKINS USER root 2 修改相关文件夹为root权限 chown R root root var lib j
  • 数据仓库-数据分层理论详解

    主题 Subject 是在较高层次上将企业信息系统中的数据进行综合 归类和分析利用的一个抽象概念 每一个主题基本对应一个宏观的分析领域 在逻辑意义上 它是对应企业中某一宏观分析领域所涉及的分析对象 例如 销售分析 就是一个分析领域 因此这个
  • 蓝桥杯2017届C++B组省赛真题 分巧克力

    儿童节那天有K位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有N块巧克力 其中第i块是Hi x Wi的方格组成的长方形 为了公平起见 小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们 切出的巧克力需要满足 1 形状