题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1332

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<iostream>
  5. #include<algorithm>
  6. #include<queue>
  7. using namespace std;
  8.  
  9. const double eps = 1e-;
  10. const double PI = acos(-1.0);
  11. const double INF = 1000000000000000.000;
  12.  
  13. struct Point{
  14. double x,y;
  15. Point(double x=, double y=) : x(x),y(y){ } //构造函数
  16. };
  17. typedef Point Vector;
  18.  
  19. struct Circle{
  20. Point C;
  21. double r;
  22.  
  23. Circle(Point C=Point(,),double r=0.0): C(C),r(r) {}
  24. Point getpoint(double ang){ //可以用来求圆上与x正半轴成ang度的点的坐标。
  25. return Point(C.x +cos(ang)*r,C.y + sin(ang)*r);
  26. }
  27. };
  28.  
  29. Vector operator + (Vector A , Vector B){return Vector(A.x+B.x,A.y+B.y);}
  30. Vector operator - (Vector A , Vector B){return Vector(A.x-B.x,A.y-B.y);}
  31. Vector operator * (double p,Vector A){return Vector(A.x*p,A.y*p);}
  32. Vector operator / (Vector A , double p){return Vector(A.x/p,A.y/p);}
  33.  
  34. bool operator < (const Point& a,const Point& b){
  35. return a.x < b.x ||( a.x == b.x && a.y < b.y);
  36. }
  37.  
  38. int dcmp(double x){
  39. if(fabs(x) < eps) return ;
  40. else return x < ? - : ;
  41. }
  42. bool operator == (const Point& a, const Point& b){
  43. return dcmp(a.x - b.x) == && dcmp(a.y - b.y) == ;
  44. }
  45.  
  46. ///向量(x,y)的极角用atan2(y,x);
  47. inline double Dot(Vector A, Vector B){ return A.x*B.x + A.y*B.y; }
  48. inline double Length(Vector A) { return sqrt(Dot(A,A)); }
  49. inline double Angle(Vector A, Vector B) { return acos(Dot(A,B) / Length(A) / Length(B)); }
  50. double Cross(Vector A, Vector B) { return A.x*B.y - A.y * B.x; }
  51.  
  52. Vector vecunit(Vector v){ return v / Length(v);} //单位向量
  53.  
  54. /*************************************分 割 线*****************************************/
  55.  
  56. const int maxn = ;
  57.  
  58. Circle cir[maxn];
  59. int N;
  60. double R,r;
  61.  
  62. int main()
  63. {
  64. //freopen("E:\\acm\\input.txt","r",stdin);
  65. cin>>N;
  66. for(int i=;i<=N;i++){
  67. scanf("%lf %lf",&cir[i].C.x,&cir[i].C.y);
  68. }
  69. scanf("%lf %lf",&R,&r);
  70.  
  71. if(dcmp(R-r) < ){
  72. printf("0\n");
  73. return ;
  74. }
  75.  
  76. Circle NewC;
  77. NewC.r = R;
  78.  
  79. for(int i=;i<=N;i++){
  80. cir[i].r = r;
  81. }
  82. double ave = *PI / ;
  83. int ans = ;
  84. for(int i=;i<=N;i++){
  85. for(double ang=;ang<=*PI;ang+=ave){
  86. int temp = ;
  87. Point P = cir[i].getpoint(ang); //在圆上取点。
  88.  
  89. NewC.C = P + R * (cir[i].C-P)/Length(cir[i].C-P);
  90.  
  91. for(int j=;j<=N;j++){
  92. if(i == j) continue;
  93. if(dcmp(fabs(NewC.r-cir[j].r) - Length(NewC.C - cir[j].C)) >= ) {
  94. temp++;
  95. }
  96. }
  97. ans = max(ans,temp);
  98. }
  99. }
  100.  
  101. printf("%d\n",ans);
  102. }

Ural 1332 把圆细分+圆内切,内含关系判定的更多相关文章

  1. bzoj2289: 【POJ Challenge】圆,圆,圆

    Description 1tthinking随便地画了一些圆. ftiasch认为这些圆有交集(面积非零)的可能性不大.因为他实在画了太多圆,所以你被请来判断是否存在交集. Input 第1行,一个整 ...

  2. UVa 10969 (圆与圆之间的覆盖问题) Sweet Dream

    题意: 有n个按先后顺序放置的不同大小不同位置的圆,求所有可见圆弧的长度. 分析: 这道题应该是大白书上例题 LA 2572 (求可见圆盘的数量) Kanazawa 的加强版,整体框架都差不多. 对于 ...

  3. 【BZOJ】2289: 【POJ Challenge】圆,圆,圆

    题解 二分一个横坐标,过这个横坐标做一条和y轴平行的直线,相当于在这条直线上做区间覆盖,如果区间有交的话,那么答案是True 否则的话取两个不相交的区间,如果这两个圆相离或相切则不合法 否则看看相交的 ...

  4. hdu4063(圆与圆交+线段与圆交+最短路)

    写几何题总是提心吊胆.精度问题真心吓人. 其实思路挺简单的一道题,真是什么算法和几何double搞到一块,心里就虚虚的. 思路:求出所有圆之间的交点,然后用这些交点跑一遍最短路就可以了. Aircra ...

  5. 纯CSS圆环与圆

    1. 两个标签的嵌套: <div class="element1"> <div class="child1"></div> ...

  6. hdu 4063 福州赛区网络赛 圆 ****

    画几个图后,知道路径点集一定是起点终点加上圆与圆之间的交点,枚举每两个点之间是否能走,能走则连上线,然后求一遍最短路即可 #include<cstdio> #include<cstd ...

  7. POJ 3549 GSM phone(圆+扫描线+最短路)

    题目意思是求起点s到终点s的最短路,但是只能在圆的内部和边上走.一种可以想到的方法就是求出所有的交点,然后两两连边并验证合法性,但是这样的交点数规模有n2. 我们可以观察发现,我们在圆求并构成的图形中 ...

  8. hdu6354 Everything Has Changed (圆的相交弧长)

    题目传送门 题意: 用一堆圆来切割一个圆心为原点,半径为R的圆A,问切割完毕后圆A外围剩余部分的周长(图中的红线部分). 思路: 首先判定圆与圆A的关系,这题我们只需要与A内切.相交的圆. 然后就是求 ...

  9. HDU-4773 Problem of Apollonius (圆的反演)

    参考: https://oi-wiki.org/geometry/inverse/ https://blog.csdn.net/acdreamers/article/details/16966369 ...

随机推荐

  1. play app to war

    project/Build.scala import sbt._ import Keys._ import play.Play.autoImport._ import PlayKeys._ impor ...

  2. PL/SQL 访问网页(get or post方式)

    在我们开发plsql程序的过程中,有时候难免要访问一些外部网站的数据.这个时候我们就要用到utl_http包. 使用utl_http包前需要注意的是,当前的用户下是否有访问外部网络的权限. 如下是自己 ...

  3. nodejs框架express4.x 学习--安装篇

    一.安装建立项目 1.安装nodejs 2.安装express(全局) npm install -g express 默认安装的是4.12.4 3.由于在3.6版本之后项目构建器被单独拆分出来,所以还 ...

  4. 【python】闰年规则

    公历闰年判定遵循的规律为: 四年一闰,百年不闰,四百年再闰. 公历闰年的简单计算方法(符合以下条件之一的年份即为闰年)1.能被4整除而不能被100整除.2.能被400整除.

  5. WorkerScript QML Type

    官方描述:在一个Qt Quick应用程序中可以使用线程了. Import Statement:     import QtQuick .属性:source : url信号:message(jsobje ...

  6. MAC OX 配置JDK环境变量

    大家在windows里面配置JDK环境变量很容易,但是如果要在mac里面配置JDK环境变量和windows里面有所不同,具体如下: 第一: mac OS里面自带jdk,不过是1.6的版本,现在很多人使 ...

  7. VC下Debug和Release区别

    整理日: 2015年3月23日 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到 ...

  8. jquery判断邮箱格式问题

    方法一: var search_str = /^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/; var email_val = $("#Email").val(); ...

  9. [BZOJ 3620] 似乎在梦中见过的样子 【KMP】

    题目链接:BZOJ - 3620 题目分析 这道题使用 KMP 做 O(n^2) 的暴力就能过. 首先,我们依次枚举字串左端点 l ,然后从这个左端点开始向后做一次 KMP. 然后我们枚举右端点 r  ...

  10. Girls' research

    hdu3294:http://acm.hdu.edu.cn/showproblem.php?pid=3294 题意:就是给你一个串,然后求一个最长的回文串,输出起点及串,但是这里在之前要转化一下. 题 ...