NC20272 [SCOI2009]生日快乐
题目
题目描述
windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy ,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。
windy主刀,每一切只能平行于一块蛋糕 的一边(任意一边),并且必须把这块蛋糕切成两块。这样,要切成 N 块蛋糕,windy必须切 N-1 次。
为了使得每块蛋糕看起来漂亮,我们要求 N块蛋糕的长边与短边的比值的最大值最小。你能帮助windy求出这个比值么?
输入描述
包含三个整数,X Y N。
1 ≤ X,Y ≤ 10000 ; 1 ≤ N ≤ 10
输出描述
包含一个浮点数,保留6位小数。
示例1
输入
5 5 5
输出
1.800000
备注
100%的数据,满足\(1 \le X,Y \le 10000 ; 1 \le N \le 10\) 。
题解
知识点:DFS。
最大值最小很容易想到二分,然鹅答案并不单调2333。
发现 \(N\) 很小考虑暴搜。对于长宽为 \(x\) 和 \(y\) 的一块蛋糕,如果要切成 \(n\) 块面积相等的,那么每块面积是 \(\frac{xy}{n}\) ,则一定要切在长上 \(\frac{x}{n}\) 的倍数点或宽上 \(\frac{y}{n}\) 的倍数点上,其他切法都不能保证每块都是 \(\frac{xy}{n}\) 。
方法有了就可以搜索了。对于每一块蛋糕(包括原蛋糕)切长或宽切 \(i\) 倍的点,\(i\) 只需到 \(\lfloor \frac{n}{2} \rfloor\) 即可,再大会对称。然后再搜索切出来两块的答案,取两块中的长宽比最大值作为这种切法的答案,如果 \(n=1\) 返回长宽比作为答案。然后取长宽两种切法的所有切点中答案的最小值返回,作为这整块的蛋糕切出来的长宽比最大值的最小值。
时间复杂度 \(O(?)\)
空间复杂度 \(O(n)\)
代码
#include <bits/stdc++.h>
using namespace std;
double ans = 0;
double dfs(double x, double y, int n) {///长x宽y的蛋糕要切成n块
if (n == 1) return max(x, y) / min(x, y);
double dx = x / n, dy = y / n, ans = 1e9;///每刀只能切在x/n或y/n的倍数上
for (int i = 1;i <= (n >> 1);i++) {///切出1~n/2块的大小,再大就对称的了
double l = max(dfs(i * dx, y, i), dfs(x - i * dx, y, n - i));///切在长上
double w = max(dfs(x, i * dy, i), dfs(x, y - i * dy, n - i));///切在宽上
ans = min({ ans, l, w });///取两种情况的最小值
}
return ans;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
double x, y;
int n;
cin >> x >> y >> n;
cout << fixed << setprecision(6) << dfs(x, y, n) << '\n';
return 0;
}
NC20272 [SCOI2009]生日快乐的更多相关文章
- BZOJ 1024: [SCOI2009]生日快乐 dfs
1024: [SCOI2009]生日快乐 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 1023 [SCOI2009]生日快乐
1024: [SCOI2009]生日快乐 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1729 Solved: 1219[Submit][Statu ...
- BZOJ 1024 [SCOI2009]生日快乐 (搜索)
1024: [SCOI2009]生日快乐 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3025 Solved: 2201[Submit][Statu ...
- 【BZOJ1024】[SCOI2009]生日快乐(搜索)
[BZOJ1024][SCOI2009]生日快乐(搜索) 题面 BZOJ 洛谷 题解 看到这个数据范围就感觉是爆搜.我们爆搜左右分成多少块,这样子左右的面积已知,再枚举一下横着切还是竖着切,这样子就可 ...
- bzoj千题计划115:bzoj1024: [SCOI2009]生日快乐
http://www.lydsy.com/JudgeOnline/problem.php?id=1024 枚举横着切还是竖着切,一边儿分多少块 #include<cstdio> #incl ...
- 【bzoj1024】[SCOI2009]生日快乐
1024: [SCOI2009]生日快乐 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2372 Solved: 1717[Submit][Statu ...
- BZOJ1024 [SCOI2009]生日快乐
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- BZOJ 1024: [SCOI2009]生日快乐
Description 将一个 \(x\times y\) 的矩形分成 \(n\) 块,让最长边:最短边 最小. Sol 搜索. \(n\) 只有 \(10\) 写一个类似于记搜的东西就好了. Cod ...
- 1024: [SCOI2009]生日快乐
暴力题,N<=10,没注意到平均分,读题真是.. 我们对于一个矩形分成两块进行搜.然后求较大值. ans=min(ans,max(dfs(x,y/n*i,i),dfs(x,y/n*(n-i),n ...
- 1024: [SCOI2009]生日快乐 - BZOJ
Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕.现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋 ...
随机推荐
- JPA + MySQL 开发总结
本文为博主原创,转载请注明出处: org.springframework.data.jpa 是 Spring Data JPA 框架中的一个包,用于简化与 JPA(Java Persistence A ...
- Prime Time-02
Timing Constrain clk3和clk4 - 异步 clk2和clk1 - 同步 有四个clk,所以要设置四个clk的周期 latency - Net delay,走线的延时 uncert ...
- K8S增加限制后的启动时间验证
K8S增加限制后的启动时间验证 背景 前段时间看了下JVM载linux上面的启动时间, 进行过一些验证. 最近想着能够验证一下K8S上面的启动相关的信息 所以就整理了一下. 虽然没有特别好的结论, 但 ...
- [转帖]MySQL定点数类型DECIMAL用法详解
https://www.cnblogs.com/danielzzz/p/16824214.html 一.MySQL DECIMAL 的使用 DECIMAL 数据类型用于在数据库中存储精确的数值,我们经 ...
- [转帖]linux下/proc/sysrq-trigger详解
/proc/sysrq-trigger详解 这是一组"魔术组合键",只要内核没有被完全锁住,不管内核在做什么事情,使用这些组合键能即时打印出内核的信息. 使用SysRq组合键是了解 ...
- Stream的简单学习
Stream的简单学习 前言 https://github.com/jeffhammond/STREAM unzip STREAM-master.zip cd /STREAM-master/ make ...
- 京东小程序CI工具实践
作者:京东物流 张俊峰 本文从整体介绍了京东小程序CI工具的用途及工作流程,读者可以通过本文了解到一种全新的京东小程序上传方式,同时结合构建脚本和流水线,可大大提高小程序的部署和发布效率. 01 前言 ...
- ClickHouse(06)ClickHouse建表语句DDL详细解析
目录 当前服务器上创建表(单节点) 语法形式 使用显式架构 从相同结构的表复制创建 从表函数创建 从选择查询创建 分布式集群创建表 临时表 分区表 创建表语句关键字解析 空值或非空修饰符 默认值表达式 ...
- 微信小程序-获取用户位置
首先我要提供几个文档的链接地址: 首先是官方文档的获取用户位置的API文档地址: 官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/api ...
- 5.3 Windows驱动开发:内核取应用层模块基址
在上一篇文章<内核取ntoskrnl模块基地址>中我们通过调用内核API函数获取到了内核进程ntoskrnl.exe的基址,当在某些场景中,我们不仅需要得到内核的基地址,也需要得到特定进程 ...