poj 1375(解析几何)
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 4292 | Accepted: 1288 |
Description
Within this model, the x-axis has been aligned with the level of the
floor. The light is considered to be a point light source with integer
co-ordinates [bx,by]. The pipes are represented by circles. The center
of the circle i has the integer co-ordinates [cxi,cyi] and an integer
radius ri. As pipes are made from solid material, circles cannot
overlap. Pipes cannot reflect the light and the light cannot go through
the pipes. You have to write a program which will determine the
non-overlapping intervals on the x-axis where there is, due to the
pipes, no light from the light source.
Input
input consists of blocks of lines, each of which except the last
describes one situation in the basement. The first line of each block
contains a positive integer number N < 500 expressing the number of
pipes. The second line of the block contains two integers bx and by
separated by one space. Each of the next N lines of the block contains
integers cxi, cyi and ri, where cyi + ri < by. Integers in individual
lines are separated by one space. The last block consists of one line
containing n = 0.
Output
output consists of blocks of lines, corresponding to the blocks in the
input(except the last one). One empty line must be put after each block
in the output. Each of the individual lines of the blocks in the output
will contain two real numbers, the endpoints of the interval where there
is no light from the given point light source. The reals are exact to
two decimal places and separated by one space. The intervals are sorted
according to increasing x-coordinate.
Sample Input
6
300 450
70 50 30
120 20 20
270 40 10
250 85 20
220 30 30
380 100 100
1
300 300
300 150 90
1
300 300
390 150 90
0
Sample Output
0.72 78.86
88.50 133.94
181.04 549.93 75.00 525.00 300.00 862.50
aaarticlea/png;base64,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" alt="" width="260" height="163" />大概看这个图就能够解除来了。。
这个题距离不能够取绝对值,因为下面这种情况最左边和最右边都要靠p0.x+一个正数
aaarticlea/png;base64,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" alt="" width="221" height="166" />
接下来排个序再合并区间就OK,
#include <iostream>
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
const int N = ;
struct Point {
double x,y,r;
}p[N],p0;
struct Line{
double l,r;
}line[N];
double dis(Point a,Point b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int cmp(Line a,Line b){
if(a.l<b.l) return ;
return ;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF,n){
scanf("%lf%lf",&p0.x,&p0.y);
double angle1,angle2;
for(int i=;i<n;i++){
scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].r);
double l = dis(p[i],p0); ///p0到圆心的距离
angle1 = asin(p[i].r/l);
double len = (p0.x-p[i].x);///这里千万不能够取绝对值..因为后面的有可能是加
angle2 = asin(len/l);
line[i].l = p0.x - p0.y*tan(angle1+angle2);
line[i].r = p0.x - p0.y*tan(angle2-angle1);
}
sort(line,line+n,cmp);
/*for(int i=0;i<n;i++){
printf("%lf %lf\n",line[i].l,line[i].r);
}*/
double l = line[].l,r = line[].r;
for(int i=;i<n;i++){
if(line[i].l>r){
printf("%.2lf %.2lf\n",l,r);
l = line[i].l;
r = line[i].r;
}
else{
r = max(line[i].r,r);
}
}
printf("%.2lf %.2lf\n\n",l,r);
}
return ;
}
最新文章
- Metrics-Java版的指标度量工具之一
- form表单及其中元素
- iOS学习36数据处理之SQLite数据库
- java 从args[]中赋值和程序直接赋值不一样?
- python学习笔记7(使用字符串)
- BABOK - 企业分析(Enterprise Analysis)
- iOS 断网处理
- 防止输入时键盘覆盖掉textfiled
- IT第九天 - 包、访问修饰符、变量的内存分配、String类中常用方法
- Mycat 配置说明(server.xml)
- 开发一个项目之css
- PAT (Basic Level) Practice (中文)1002 写出这个数 (20 分)
- SpringMVC中注解@RequestBody和@ResponseBody的使用区别
- 修改windows7本地策略--不能挂载磁盘和复制 -- 黏贴板-驱动器映射
- ASP.NET Core StaticFiles中间件修改wwwroot(转载)
- HBase - Filter - 过滤器的介绍以及使用
- MongoDB-管道与聚合(3)
- 【Unity】协程Coroutine及Yield常见用法
- Python 数据类型--Bytes类型
- Linux如何通过命令查看日志文件的某几行(中间几行或最后几行)