ACdream 1033 (二分法)
2012-12-22 19:21
369 查看
题目: 1033 the cover circle
地址: http://www.acdream.net/problem.php?id=1033
思路:
1. 这一道题目的意思是2个大小相同的圆,去覆盖一个矩形,多大的半径才能使圆的覆盖面积最大。
2. 先假设一个球的情况,可以将变大变小的球比作气球,那么当气球碰壁的时候圆覆盖的面积最大,可以发现一个球一定处在一条边的中线上。
3. 那么当2个球的时候,要使面积最大那么必要条件就是碰壁,其次就是两球相互触碰,那么我们发现将2球的距离拉的足够的远,也就(0 , 0),(w,h)的位置,然后在不断的吹大,同时和长边和短边触碰,由于是球,所以点成45度角移动,那么球的半径最小为0,最大为窄边的1/2.
4. 那么我们会在满足以上两个条件设置2个半径,一个是到壁的距离r1,一个是两球心的距离的1/2, r2,那么比较,当r1>r2说明气球吹大了,当r1<r2时说明气球吹小了。
5.那么可以使用二分法求解:输入->确定左右边界的值->二分法(确定r1,r2->比较->重新赋值缩小范围)->输出
代码如下:
最后注意:题目很坑,w,h没有说明谁是长边,一定要比较,这里我认为长比宽长,所以没有判断错了很多次,o(︶︿︶)o 唉
地址: http://www.acdream.net/problem.php?id=1033
思路:
1. 这一道题目的意思是2个大小相同的圆,去覆盖一个矩形,多大的半径才能使圆的覆盖面积最大。
2. 先假设一个球的情况,可以将变大变小的球比作气球,那么当气球碰壁的时候圆覆盖的面积最大,可以发现一个球一定处在一条边的中线上。
3. 那么当2个球的时候,要使面积最大那么必要条件就是碰壁,其次就是两球相互触碰,那么我们发现将2球的距离拉的足够的远,也就(0 , 0),(w,h)的位置,然后在不断的吹大,同时和长边和短边触碰,由于是球,所以点成45度角移动,那么球的半径最小为0,最大为窄边的1/2.
4. 那么我们会在满足以上两个条件设置2个半径,一个是到壁的距离r1,一个是两球心的距离的1/2, r2,那么比较,当r1>r2说明气球吹大了,当r1<r2时说明气球吹小了。
5.那么可以使用二分法求解:输入->确定左右边界的值->二分法(确定r1,r2->比较->重新赋值缩小范围)->输出
代码如下:
#include<stdio.h> #include<string.h> #include<math.h> int main(void) { double w, h; /*w为长,h为宽*/ double l, r, r1; /*l左边界,r右边界,r1中间*/ double x,y,r2; /*靠近右上的点的坐标*/ while ( scanf ("%lf%lf",&w,&h) != EOF ) { if(w<h) /*比较输入边的大小*/ { r1=w; w=h; h=r1; } l = 0; /*左边界*/ r = h/2; /*右边界*/ while (r-l>0.000001) /*使精度足够的大*/ { r1 = (r+l)/2; /*r1 到壁距离*/ x=w-r1; y=h-r1; r2= sqrt ((x - r1) * (x - r1) + (y - r1) * (y - r1 ))/2; if ( r1 >= r2 ) { r=r1; } else { l=r1; } } printf("%.3lf\n",l); } return 0; } /************************************************************** Problem: 1033 Language: C++ Result: Accepted Time:10 ms Memory:1012 kb ****************************************************************/
最后注意:题目很坑,w,h没有说明谁是长边,一定要比较,这里我认为长比宽长,所以没有判断错了很多次,o(︶︿︶)o 唉
相关文章推荐
- 二分法入门(二)——POJ 3258,2976;HDU 4430;CodeForces 535C;Gym 101194D;ACdream 1066
- ACdream OJ 完美数
- ACdream OJ 1154 Lowbit Sum
- 用“道”的思想解决费用流问题---取/不取皆是取 (有下界->有上界) / ACdreamoj 1171
- ACdream 1187 Rational Number Tree(搜索:DFS)
- acdream 1412 2-3 Trees
- acdream:Andrew Stankevich Contest 3:Two Cylinders:数值积分
- ACdream之kmp
- ACdream 暴力专场B
- 1714 ACdream王国的花店
- ACdream 1727 Sequence
- AC dream 1099 瑶瑶的第K大
- ACdream 1429 Rectangular Polygon
- 一道超级坑爹的水题(ACdream oj 无耻的出题人)
- ACdream OJ 平衡树(二进制字典树)
- acdreamoj1112 sg函数
- Acdream 1065 同心树(数学)
- ACdream 之ACfun 题解
- ACdreamOJ 1154 Lowbit Sum (数位dp)
- ACdream 1191(广搜)