【zzulioj 2127】 tmk射气球
比较简单的题,直接求空间中一个点到直线的距离而已,这道题说了直线和水平的平面 平行,我们可以先求投影到直线的距离,然后再算当前点到直线的距离。
Description
有一天TMK在做一个飞艇环游世界,突然他发现有一个气球匀速沿直线飘过,tmk想起了他飞艇上有一把弓,他打算拿弓去射气球,为了提高射击的准确性,他首先在飞艇上找到一个离气球最近的一个点,然后射击(即使气球在飞船的正上方),现在求某些时刻飞艇上的点和气球的距离最小是多少(这个最小距离我们简称为飞艇到气球的距离)。
Input
第一行一个整数T(T<=20),表示有T组测试数据
每组测试数据,有两行。
第一行有5个整数,h,x1,y1,x2,y2,其中h表示飞船的高度,飞船可抽象为一个线段,(x1,y1)(x2,y2)分别是这个线段的端点(有可能会有(x1,y1)(x2,y2)重合的情况)
第二行有6个整数,x,y,z,X,Y,Z分别表示气球的在第0秒的时候的横坐标,纵坐标,高度,一秒时间气球横坐标的变化量,一秒时间气球纵坐标的变化量,一秒时间气球高度的变化量(如果现在气球在(x0,y0,z0)下一秒坐标就为(x0+X,y0+Y,z0+Z))
第三行1个整数n,表示询问组数
接下来的n行,每行一个整数,表示询问的秒数t
题目涉及的整数除了T以外,范围均为[0,1000]
Output
每组询问输出n行,每行输出一个数,表示在t秒的时候飞艇与气球的距离最小是多少,保留两位小数
Sample Input
Sample Output
1 #include <iostream> 2 #include<string> 3 #include<cstring> 4 #include<vector> 5 #include<set> 6 #include<map> 7 #include<stack> 8 #include<queue> 9 #include<list> 10 #include<cmath> 11 #include<algorithm> 12 #include<cstdio> 13 #include <bitset> 14 #include <climits> 15 #include <time.h> 16 #include<iomanip> 17 #define INF 0x3f3f3f3f 18 using namespace std; 19 #define ll long long 20 #define eps 1e-8 21 #define zero(x) (((x>0)?(x):-(x))<eps) 22 struct point{double x,y;}; 23 24 double distancen(point p1,point p2) 25 { 26 return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); 27 } 28 ll xmult(point p1,point p2,point p0) 29 { 30 return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); 31 32 } 33 point intersection(point u1,point u2,point v1,point v2) 34 { 35 point ret = u1; 36 double t = ((u1.x-v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x)) 37 /((u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x)); 38 ret.x+=(u2.x-u1.x)*t; 39 ret.y+=(u2.y-u1.y)*t; 40 return ret; 41 42 } 43 44 point ptoseg(point p,point l1,point l2) 45 { 46 point t = p; 47 t.x+=l1.y-l2.y; 48 t.y+=l2.x-l1.x; 49 50 if(xmult(l1,t,p)*xmult(l2,t,p)>eps) 51 { 52 return (distancen(p,l1)<distancen(p,l2))?l1:l2; 53 } 54 return intersection(p,t,l1,l2); 55 } 56 57 int dot_online(point p,point l1,point l2) 58 { 59 return (zero(xmult(p,l1,l2))&&(l1.x-p.x)*(l2.x-p.x)==0&&(l1.y-p.y)*(l2.y-p.y)==0); 60 } 61 62 int main() 63 { 64 //freopen("D://in.txt","r",stdin); 65 //freopen("D://out.txt","w",stdout); 66 int T; 67 scanf("%d",&T); 68 while(T--) 69 { 70 bool mark = false; 71 point ll1,ll2; 72 double h,x1,y1,x2,y2; 73 scanf("%lf%lf%lf%lf%lf",&h,&x1,&y1,&x2,&y2); 74 ll1.x = x1;ll1.y = y1; 75 ll2.x = x2;ll2.y = y2; 76 if(x1==x2&&y1==y2) 77 mark = true; 78 79 double x,y,z,X,Y,Z; 80 scanf("%lf%lf%lf%lf%lf%lf",&x,&y,&z,&X,&Y,&Z); 81 int n; 82 scanf("%d",&n); 83 while(n--) 84 { 85 int t; 86 scanf("%d",&t); 87 point newp; 88 newp.x = x+t*X; 89 newp.y = y+t*Y; 90 double zz = z+t*Z; 91 if(mark) 92 { 93 double res = distancen(newp,ll1); 94 double ans = sqrt((h-zz)*(h-zz)+res*res); 95 printf("%.2lf\n",ans); 96 } 97 else if(dot_online(newp,ll1,ll2)) 98 { 99 double ans = fabs(h-zz); 100 printf("%.2lf\n",ans); 101 } 102 else 103 { 104 point pseg = ptoseg(newp,ll1,ll2); 105 double res = distancen(pseg,newp); 106 double ans = sqrt(res*res+(zz-h)*(zz-h)); 107 printf("%.2lf\n",ans); 108 } 109 } 110 } 111 return 0; 112 }
转载于:https://www.cnblogs.com/bushuiqitiandi/p/6724279.html
【zzulioj 2127】 tmk射气球相关推荐
- zzuli 2127 tmk射气球
经典点到线段最短距离的问题,用向量法写的 题目链接:zzuli-2127 #include<iostream> #include<cmath> using namespace ...
- 【zzulioj 2127 tmk射气球】+ 空间点到线段距离
2127: tmk射气球 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 537 Solved: 97 SubmitStatusWeb Board Des ...
- 【郑轻邀请赛 A】tmk射气球
[题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2127 [题意] [题解] 把气球和飞艇所代表的直线投影到xoy面上 设气球所在位置为 ...
- 郑轻校赛 2127 tmk射气球 (数学)
Description 有一天TMK在做一个飞艇环游世界,突然他发现有一个气球匀速沿直线飘过,tmk想起了他飞艇上有一把弓,他打算拿弓去射气球,为了提高射击的准确性,他首先在飞艇上找到一个离气球最近的 ...
- leetcode 452 射气球
leetcode 452 题 解题思路: 将气球左边界从小到大排序,然后从一个的最右边开始射箭,直到不能扎到下一个气球的最左边为止.偷一波官方题解的图. class Solution {public ...
- leetcode452_用最少的箭射气球(python)
题目: 对于每个气球,提供的输入是水平方向上,纵坐标不重要,因此只要知道开始和结束的横坐标就足够了.开始坐标总是小于结束坐标. 一支弓箭可以沿着 x 轴从不同点完全垂直地射出. xstart ≤ x ...
- tmk射气球(郑州轻工业学院第九届ACM程序设计大赛)
题目描述 有一天TMK在做一个飞艇环游世界,突然他发现有一个气球沿匀速沿直线飘过,tmk想起了他飞艇上有一把弓,他打算拿弓去射气球,为了提高射击的准确性,他首先在飞艇上找到一个离气球最近的一个点,然后 ...
- 用最少数量的箭引爆气球
思路 如何使用最少的弓箭呢? 直觉上来看,貌似只射重叠最多的气球,用的弓箭一定最少,那么有没有当前重叠了三个气球,我射两个,留下一个和后面的一起射这样弓箭用的更少的情况呢? 尝试一下举反例,发现没有这 ...
- leetcode 452. Minimum Number of Arrows to Burst Balloons | 452. 用最少数量的箭引爆气球(左程云:最大线段重合问题)
题目 https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons/ 题解 重叠区间问题可以总结为在坐标轴上若干个位 ...
最新文章
- 微软撤回了开放面部识别数据集,出于法律原因
- poj2002 poj3432 正方形个数 (hash,二分)
- Android EditText属性用法
- 32位x86处理器架构
- QInputDialog Multiple Inputs 输入多个变量的对话框
- 毛绒材质渲染_学室内设计必进,建模渲染那都不是事儿
- 前端学习(2013)vue之电商管理系统电商系统之监听on-success事件
- 9 10次c语言上机作业答案,第十五次上机作业带答案
- idle点开没反应_翟天临、靳东,一个人越是没文化越是喜欢装
- Java 夯实基础之注解
- 决策树结果可视化中文乱码问题解决方案
- 冒泡排序图解及代码实现
- 淘宝APP用户行为数据分析案例——Python
- Android开发之so文件使用方法详解
- Python 批量下载SIGMOD,VLDB的论文 Mac OS
- 贝格尔编排法-java
- androidjni开发!应聘高级Android工程师历程感言,快来收藏!
- 双系统安装红旗linux,红旗LINUX怎么安装成双系统?
- android studio制作.9图片,并且不改变原图大小
- 系统升级: PHP(5.1.6-5.4.7) CI(1.7.2-2.1.2)调查记录
热门文章
- 如何在DBNet中加入新的主干网络
- 电子产品和计算机技术,还傻傻分不清电子产品和数码产品?看看这些就会恍然大悟...
- 项目实训-千寻-服务端SSH框架完善
- ConfigurableListableBeanFactoryBeanFactory的集大成者
- 【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现
- python清洗数据去除停用词_关于regex:在Python中删除停用词的快捷方法
- jQuery中国省份地图悬浮层简介js特效代码
- 德龙X5000导航升级包下载
- 老毛桃U盘启动盘制作工具V20140501完美贡献版
- iOS VoIP电话:CallKit与PushKit的应用