1 条题解
-
0
#include<algorithm> #include<bits/stdc++.h> #include<cstring> #include<cmath> const int maxm=1111; using namespace std; struct Circle{ double x,y; double r; }c[maxm]; struct Line{ double l,r; }line[maxm]; double dist(int X,int Y,Circle A){ return sqrt( (X-A.x)*(X-A.x)+(Y-A.y)*(Y-A.y) ); } bool cmp(Line A,Line B){ return A.l<B.l; } int main() { int N; while(scanf("%d",&N)!=EOF && N!=0) { double x,y;scanf("%lf %lf",&x,&y);//灯位置 for(int i=1;i<=N;i++) { scanf("%lf %lf %lf",&c[i].x,&c[i].y,&c[i].r); } for(int i=1;i<=N;i++) { int flag=x>c[i].x?1:-1; double d=dist(x,y,c[i]); double a=asin(c[i].r/d);//角a //int rra=0; //if(flag==1) // rra=x-c[i].x; //else // rra=c[i].x-x; double b=asin((x-c[i].x)/d); double ag1=a+b,ag2=b-a; line[i].l=x-y*tan(ag1); line[i].r=x-y*tan(ag2); } sort(line+1,line+N+1,cmp); double ll=line[1].l; double rr=line[1].r; for(int i=2;i<=N;i++) { if(line[i].l>rr) { printf("%.2f %.2f\n",ll,rr); ll=line[i].l; rr=line[i].r; } else rr=max(line[i].r,rr); } printf("%.2lf %.2lf\n\n",ll,rr); } return 0; }
- 1
信息
- ID
- 376
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者