HDU 6158 圆的反演
来源:互联网 发布:js时间格式化插件 编辑:程序博客网 时间:2024/06/06 09:35
上一篇介绍了院的反演,这一篇就是一道网络赛圆的反演的题目。其实感觉这道题目有点…. 感觉它卡的东西不是太好 反正计算几何你一定要注意精度问题。emmmm…… 这个题目就是圆的反演,你只需要找对里面的几何关系就好了
注意由于反演 中具有一一对应的性质,只有原来相交的点到后面才会可能相交,剩下的就是圆的反演了 (这个东西没有模版).
还有我们用反演变换的时候一般关注两个东西,一个是过反演中心的圆 (因为这种圆的反形是一条直线) 另一种情况我们关注不过反演中心的直线,因为这个的反形是圆。也一般在这种情况下我们才使用反演变换 多个圆的时候有时也会去考虑这种变换。
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const double eps = 1e-7;const double PI = 3.141592653589793;int main () { int T; scanf ("%d",&T); while (T --) { double r1,r2; int n; scanf ("%lf%lf%d",&r1,&r2,&n); if (r1 < r2) swap (r1,r2); double r3 = r1 - r2; double ans = r3 * r3; double R = 4 * r1; double l = R / (2 * r1),r = R / (2 * r2); double rr = (r - l) / 2; int u = (n - 1)/ 2; int v = 0; if (n % 2 == 0) v = 1; double add = 2 * rr; double len = rr + l; for (int i = 1;i <= u + v; ++ i) { double dis = sqrt (add * add + len * len); add += 2 * rr; double l1 = dis - rr; double r1 = dis + rr; double ansr = (R / l1 - R / r1) / 2; ans += ansr * ansr * 2; if (i == u + v && v) { ans -= ansr * ansr; } if (ansr <= eps) break; } printf ("%.5f\n",ans*PI); } return 0;}
阅读全文
0 0
- hdu-6158-圆的反演
- HDU 6158 圆的反演
- hdu 4773 圆的反演变换
- HDU 4773 圆的反演(经典
- HDU 6097 Mindis(圆的反演)
- HDU 4773 Problem of Apollonius 圆的反演
- [圆的反演] HDU 4773 Problem of Apollonius
- 圆的反演变换
- 圆的反演
- 圆的反演
- 圆的反演
- 圆的反演模版
- hdu 4773 几何反演 线->圆
- 【圆的反演变换】hdu4773
- Mindis(圆的反演变换)
- 圆的反演+计算几何
- 圆的反演变换(*)
- hdu6097 Mindis【圆的反演】
- MySQL中游标的使用
- QT Layout中增删widget与切换界面
- 两表关联,取B表满足条件的第一条数据
- 周计划 补完工程 第六周 python基础第一周
- C语言(求1-3+5-7+9-11...+101的结果)
- HDU 6158 圆的反演
- 133. Clone Graph
- 数据库索引原理
- java基本思想(二)
- 八大基本排序算法
- usb设计中的管道pipe描述
- python 笔记
- http://nian.so/#网站的拓展工具编写
- git学习1