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 ;
}
poj 1375(解析几何)的更多相关文章
- POJ 1375 Intervals | 解析几何
参考了这个博客 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath&g ...
- poj 1375
一道解析几何么,,, 其实就是求直线与圆的切线. 看到方法有很多,比如根据角度之类的. 这里主要用到了初中的几何知识. 考虑这幅图. 首先可以根据相似三角形知道b的长度,同时圆心与点的方向也知道. 那 ...
- POJ 1375 Intervals 光源投影【平面几何】
<题目链接> <转载于> 题目大意: 给一个光源点s,给一些圆,源点和s相切会形成阴影,求每一段阴影在横轴上的区间. 解题分析: 这道其实不需要点与圆切线的板子来求解,完全可以 ...
- [poj] 1375 Interval || 圆的切线&和直线的交点
原题 每组数据给出一些圆(障碍物)的圆心和半径,一个点和一条线段,求站在这个点,能开到的线段的部分的左端点和右端点.没有则输出"No View" 相当于求过该点的圆的两条切线,切线 ...
- [转] POJ计算几何
转自:http://blog.csdn.net/tyger/article/details/4480029 计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板 ...
- ACM计算几何题目推荐
//第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...
- CSU训练分类
√√第一部分 基础算法(#10023 除外) 第 1 章 贪心算法 √√#10000 「一本通 1.1 例 1」活动安排 √√#10001 「一本通 1.1 例 2」种树 √√#10002 「一本通 ...
- zoj 1375||poj 1230(贪心)
Pass-Muraille Time Limit: 2 Seconds Memory Limit: 65536 KB In modern day magic shows, passing t ...
- POJ 题目分类(转载)
Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...
随机推荐
- Python 3基础教程3-数学运算
本文来介绍下Python中的常见数学运算,其实和其他语言一样,加减乘除语法差不多,这里注意下Python中指数的表示方法. # 这里介绍 常见的数学运算 # 加法print(5 + 8) # 减法pr ...
- ssh.sh_for_ubuntu1404
#!/bin/bash sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config s ...
- Sublime Text 2 中文乱码
欲解决乱码问题,关键在于让Sublime Text 2支持GB2312和GBK.步骤如下:1.安装Sublime Package Control.在Sublime Text 2上用Ctrl+-打开控制 ...
- form表单文件上传 servlet文件接收
需要导入jar包 commons-fileupload-1.3.2.jar commons-io-2.5.jar Upload.Jsp代码 <%@ page language="jav ...
- 如何将查询到的数据显示在DataGridView中
背景介绍: 数据库中的T_Line_Info表中存放着学生上机的记录,也就是我们需要查询上机记录的表,其中具体内容为: 界面设计如下: 右击DataGridView控件,选择编辑列,设计它的列名. 代 ...
- objective-c runtime 开发详情
目录 概述 对象与类的实质 id与class 继承关系与isa 总结 C函数创建一个OC类 OC类与runtime NSObjectProtocol NSObject NSProxy 一.概述 Obj ...
- weex 开发 (已放弃了)
关于weex 开发 本菜已放弃使用了,当初选择使用weex 是为了同时支持h5 和 android / ios 三端:想法很不错,深入之后 突然发现,开发起来并没有很轻松,因为weex 中有些方法, ...
- vue.$refs 的用法
官网给出的解释是: 被用来给元素或子组件注册引用信息.引用信息将会注册在父组件的 $refs 对象上. 1.如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素; 2.如果用在子组件上,引用 ...
- 【bzoj4940】[Ynoi2016]这是我自己的发明 DFS序+树上倍增+莫队算法
题目描述 给一个树,n 个点,有点权,初始根是 1. m 个操作,每次操作: 1. 将树根换为 x. 2. 给出两个点 x,y,从 x 的子树中选每一个点,y 的子树中选每一个点,如果两个点点权相等, ...
- 动态MST
原谅我真的写不下去了,太难写了,先占坑. 啥时候有比较连续的时间了再写 肯定没用了的无聊代码 #include <cstdio> #include <vector> const ...