HDU 6158 The Designer【计算几何+笛卡尔定理+韦达定理】
2017-08-23 21:53
477 查看
题目链接
题意:照着图一个个的摆n个小圆,求小圆的总面积。
首先很容易得到第一个圆的半径,然后用笛卡尔定理导出4个圆半径的关系。
笛卡尔定理:
若平面上四个半径为r1、r2、r3、r4的圆两两相切于不同点,则其半径满足以下结论:
(1)若四圆两两外切,则∑4i=11ri=2∑4i=11r2i。
(2)若半径为r1、r2、r3的圆内切于半径为r4的圆中,则(1r1+1r2+1r3+1r4)2=2∑4i=11r2i。
推导出关系式后,以k4作为自变量,则这个二元一次方程的两组解分别表示k3两边的两个圆的曲率。用韦达定理维护这个值就可以了。
另外,当圆的半径小于eps的时候直接break,否则会超时。
如果觉得我讲的不清楚的话可以看看这篇博客。
这题好像还有反演圆的做法,待日后补。
题意:照着图一个个的摆n个小圆,求小圆的总面积。
首先很容易得到第一个圆的半径,然后用笛卡尔定理导出4个圆半径的关系。
笛卡尔定理:
若平面上四个半径为r1、r2、r3、r4的圆两两相切于不同点,则其半径满足以下结论:
(1)若四圆两两外切,则∑4i=11ri=2∑4i=11r2i。
(2)若半径为r1、r2、r3的圆内切于半径为r4的圆中,则(1r1+1r2+1r3+1r4)2=2∑4i=11r2i。
推导出关系式后,以k4作为自变量,则这个二元一次方程的两组解分别表示k3两边的两个圆的曲率。用韦达定理维护这个值就可以了。
另外,当圆的半径小于eps的时候直接break,否则会超时。
如果觉得我讲的不清楚的话可以看看这篇博客。
这题好像还有反演圆的做法,待日后补。
#include <bits/stdc++.h> using namespace std; const double pi=acos(-1.0); const double eps=1e-8; int T; double R1,R2; int N; double ans=0; double k1,k2,k3,k4,k5; int main(){ scanf("%d",&T); while (T--){ scanf("%lf %lf",&R1,&R2); scanf("%d",&N); if (R1<R2){ swap(R1,R2); } ans=0; k1=-1.0/R1,k2=1.0/R2; k3=1.0/(R1-R2); ans+=1.0/(k3*k3); k4=k1+k2+k3; for (int i=2;i<=N;i++){ ans+=1.0/(k4*k4); if ((1.0/k4)<eps) break; if (i<=N-1){ ans+=1.0/(k4*k4); i++; } k5=2*(k1+k2+k4)-k3; k3=k4; k4=k5; } ans*=pi; printf("%.5f\n",ans); } }
相关文章推荐
- HDU 6158 The Designer(笛卡尔定理+韦达定理)
- HDU 4063 Aircraft(计算几何)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)
- hdu 4717 The Moving Points(三分+计算几何)
- [hdu 2826] The troubles of lmy [简单计算几何 - 相似]
- HDU 1071 The area(计算几何)
- HDU 1798 Tell me the area(计算几何,求相交圆面积)
- HDU 1115 Lifting the Stone 计算几何(多边形找重心)
- HDU 6158 The Designer(Descartes定理)
- hdu 6158 计算几何
- HDU 1374 The Circumference of the Circle 计算几何
- hdu 1115 Lifting the Stone(计算几何(重心))
- Hdu 1071 The area 利用计算几何求面积
- hdu 1115:Lifting the Stone(计算几何,求多边形重心。 过年好!)
- HDU 1115 Lifting the Stone(计算几何)
- HDU 6158 The Designer(笛卡尔定理求通项)
- HDU 2438 Turn the corner 计算几何+三分
- hdu 6158 The Designer( 反演圆)
- HDU 1071 The area(计算几何)
- HDU 2438 Turn the corner (计算几何 + 三分)
- hdu 2105:The Center of Gravity(计算几何,求三角形重心)