Cupboard and Balloons cf199 C(数学公式计算)
2016-07-10 08:39
399 查看
题意分析:一个由长方体和半球组成的柜子,深为r,横截面矩形高为h,宽为2*r,半圆的半径为r,将直径为r的球放进柜子里,求最多能放置多少个。
首先在长方体内放球,完全在长方体内的球可以放(h/r)*2个,矩形剩余高度为h',然后判断剩下区域能放一个球还是两个球。感觉自己写的比较麻烦,
判断临界条件即刚好能放置两个球时h' == r.然后根据这个找到一般情况下圆心的坐标,判断两点之间的距离,若大于直径则还可以再放一个球,纯数学问题。
首先在长方体内放球,完全在长方体内的球可以放(h/r)*2个,矩形剩余高度为h',然后判断剩下区域能放一个球还是两个球。感觉自己写的比较麻烦,
判断临界条件即刚好能放置两个球时h' == r.然后根据这个找到一般情况下圆心的坐标,判断两点之间的距离,若大于直径则还可以再放一个球,纯数学问题。
#include<cstdio> #include<string> #include<cstdlib> #include<cmath> #include<iostream> #include<cstring> #include<set> #include<queue> #include<string> #include <algorithm> #include<vector> using namespace std; const int maxn = 100010; const double eps = 1e-9; int main() { long long r, h; scanf("%I64d%I64d",&r,&h); long long ans = 0; double h1,h2,h3; ans = (long long)((h * 1.0 + r / 2.0) / r); h1 = ans * (double)r; h2 = sqrt(3.0) / 2 * r; h3 = h2 - h1 + h; double hh = sqrt(3.0) / 2.0 * r - h3; hh -= (r / 2.0); ans *= 2; double dd = r * r / 4.0 + (hh - r / 2.0) * (hh - r / 2.0); if(dd - r * r >= eps) ans++; printf("%I64d\n",ans); return 0; }但看了网上一个博客,他的判断条件就很简单点击打开链接
相关文章推荐
- Android SharePreferences 本地储存
- python GTK+3 使用soup做一个http服务器
- leetcode: Find Minimum in Rotated Sorted Array
- hdu-2991-模拟
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
- Sqlldr性能优化总结
- python学习——切片
- 美化UI和UI常见问题
- viewholder
- VIM配置---面向前端
- (06)自定义类型的1:N关联映射
- Python 代码性能优化技巧
- php 使用phpqrcode类生成带有logo的二维码 使logo不失真(透明)
- 第一篇博客
- eclipse安卓引入库项目的正确方法
- Spring设置与读取.properties配置文件的bean
- SOA
- 创业为什么会失败?
- ssh免登录
- Leetcode 74. Search a 2D Matrix