题目链接

题目

题目描述

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]生日快乐的更多相关文章

  1. BZOJ 1024: [SCOI2009]生日快乐 dfs

    1024: [SCOI2009]生日快乐 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  2. BZOJ 1023 [SCOI2009]生日快乐

    1024: [SCOI2009]生日快乐 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1729  Solved: 1219[Submit][Statu ...

  3. BZOJ 1024 [SCOI2009]生日快乐 (搜索)

    1024: [SCOI2009]生日快乐 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3025  Solved: 2201[Submit][Statu ...

  4. 【BZOJ1024】[SCOI2009]生日快乐(搜索)

    [BZOJ1024][SCOI2009]生日快乐(搜索) 题面 BZOJ 洛谷 题解 看到这个数据范围就感觉是爆搜.我们爆搜左右分成多少块,这样子左右的面积已知,再枚举一下横着切还是竖着切,这样子就可 ...

  5. bzoj千题计划115:bzoj1024: [SCOI2009]生日快乐

    http://www.lydsy.com/JudgeOnline/problem.php?id=1024 枚举横着切还是竖着切,一边儿分多少块 #include<cstdio> #incl ...

  6. 【bzoj1024】[SCOI2009]生日快乐

    1024: [SCOI2009]生日快乐 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2372  Solved: 1717[Submit][Statu ...

  7. BZOJ1024 [SCOI2009]生日快乐

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  8. BZOJ 1024: [SCOI2009]生日快乐

    Description 将一个 \(x\times y\) 的矩形分成 \(n\) 块,让最长边:最短边 最小. Sol 搜索. \(n\) 只有 \(10\) 写一个类似于记搜的东西就好了. Cod ...

  9. 1024: [SCOI2009]生日快乐

    暴力题,N<=10,没注意到平均分,读题真是.. 我们对于一个矩形分成两块进行搜.然后求较大值. ans=min(ans,max(dfs(x,y/n*i,i),dfs(x,y/n*(n-i),n ...

  10. 1024: [SCOI2009]生日快乐 - BZOJ

    Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕.现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋 ...

随机推荐

  1. VSCode + GCC编译器(MinGW)开发环境中文字符乱码问题踩坑与解决办法

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  2. 在Winform系统开发中,使用MediatR来实现类似事件总线的消息处理

    MediatR是一款进程内的消息订阅.发布框架,可实现请求/响应.命令.查询.通知和事件的消息传递,解耦了消息处理器和消息之间耦合.提供了Send方法用于发布到单个处理程序.Publish方法发布到多 ...

  3. [转帖]TLS 1.2 浏览器兼容性

    https://support-splashtopbusiness.splashtop.com/hc/zh-cn/articles/4414002633883-TLS-1-2-%E6%B5%8F%E8 ...

  4. [转帖]shell编程:变量知识进阶(三)

    https://www.cnblogs.com/luoahong/articles/9154309.html 1 Shell特殊位置变量 范例1:$n的实践例子 1 2 3 4 5 6 7 8 9 1 ...

  5. nexus的简单安装与使用

    nexus的简单安装与使用 文件下载 官网上面下载文件比较麻烦, 得科学一些 https://www.sonatype.com/download-oss-sonatype 选择oss 开源版进行下载 ...

  6. [转帖]Fiddler抓取Chrome浏览器访问baiud.com报NET::ERR_CERT_COMMON_NAME_INVALID

    错误现象 解决方法: 1.Chrome浏览器地址栏中输:chrome://net-internals/#hsts 2.在Query HSTS/PKP domain处搜索www.baidu.com网站, ...

  7. CentOS测试yum update.

    我有一台centos7 1611 的机器 想着升级一下 简单进行测试 1. 操作系统的信息为: [root@CentOS1611 yum.repos.d]# uname -a Linux CentOS ...

  8. Oracle 提示 用户在线,无法删除的清理方法

    查找删除策略. select username,sid,serial# from v$session where username='FSSCDEC004'; alter system kill se ...

  9. [译]深入了解现代web浏览器(四)

    本文是根据Mariko Kosaka在谷歌开发者网站上的系列文章https://developer.chrome.com/blog/inside-browser-part4/翻译而来,共有四篇,该篇是 ...

  10. postman中js脚本简单用法

    1.获取接口相应结果 var jsonData = pm.response.json() 2.设置环境变量 pm.environment.set("variable_key", & ...