HLG 1506 屠夫和狙击手【判断点在线段上+线段与圆相交】
Description |
DOTA是一个大学生中非常受欢迎的一款游戏,游戏中天灾军团和近卫军团一直处于对抗状态,如果近卫军团的世界之树或者天灾军团的冰封王座被摧毁,那么游戏会立即结束。游戏中最有意思的是就两个军团的基地内都有一个可以补充各自英雄能量的泉水。当然泉水不仅仅是一个能量补给站,而且还会很快杀死想靠近的敌方英雄。但是无论如何泉水奈何不了近卫军团的矮人狙击手,因为矮人狙击手的攻击范围要比泉水远很多。因此矮人狙击手甚至有能力拆掉一个泉水。有一个生命值不多的矮人狙击手要攻击天灾军团的泉水,这个猥琐的行为是天灾军团不能容忍的,天灾军团的英雄屠夫是在看不下去了,屠夫准备出马收拾这个狙击手。屠夫有一把钩子,可以将一条线上单位钩到自己面前(只要这个单位在屠夫和屠夫钩子瞄准的坐标点之间的线段上,包括瞄准点在内屠夫都可以办到)。尽管屠夫没有把握杀死矮人狙击手,但是如果矮人狙击手进入泉水的攻击范围泉水会立即杀死狙击手的。 |
Input |
本题有多组测试数据,第一行输入三个整数,泉水的坐标 x1 y1 和泉水的攻击半径r,第二行输入四个整数,分别代表屠夫的位置(x2 y2)和屠夫钩子的目标位置(x3 y3)。第三行输入两个整数,代表狙击手的位置 x4 y4。 |
Output |
如果矮人狙击手必死,输出 DEAD 并换行 否则输出 LIVE 并换行 |
Sample Output |
4 4 4 2 2 -5 0 6 6 |
Hint |
DEAD |
思路:如果点在圆内,或者点在线段上并且线段与圆有交点,则输出DEAD,否则...
代码如下:
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> using namespace std; int mindis(int p1xx, int p1yy, int p2xx, int p2yy, int qxx, int qyy, int rr) {int flag=1;double sxx, syy, k, dis;if(p1xx==p2xx) {sxx=p1xx;syy=qyy;flag=0;}if(p1yy==p2yy) {sxx=qxx;syy=p1yy;flag=0;}if(flag){k=1.0*(p2yy-p1yy)/(p2xx-p1xx);sxx=(k*k*p1xx+k*(qyy-p1yy)+qxx)/(k*k+1);syy=k*(sxx-p1xx)+p1yy;}if(min(p1xx,p2xx)<=sxx&&sxx<=max(p1xx,p2xx))dis=sqrt((qxx-sxx)*(qxx-sxx)+(qyy-syy)*(qyy-syy));elsedis=min(sqrt((qxx-p1xx)*(qxx-p1xx)+(qyy-p1yy)*(qyy-p1yy)),sqrt((qxx-p2xx)*(qxx-p2xx)+(qyy-p2yy)*(qyy-p2yy)));//printf("%.2lf\n", dis); if(dis-rr>0)return 0;return 1; } int main() {int ox, oy, r, p1x, p1y, p2x, p2y, ax, ay;while(scanf("%d%d%d%d%d%d%d%d%d", &ox, &oy, &r, &p1x, &p1y, &p2x, &p2y, &ax, &ay)!=EOF){int flag=0;int dis=(ox-ax)*(ox-ax)+(oy-ay)*(oy-ay);if(dis<=r*r)flag=1;if(((p1x-ax)*(p2y-ay)-(p2x-ax)*(p1y-ay)==0)&&((p1x-ax)*(p2x-ax)<=0)&&(p1y-ay)*(p2y-ay)<=0&&mindis(p1x, p1y, p2x, p2y, ox, oy, r))flag=1;if(flag==1)printf("DEAD\n");elseprintf("LIVE\n");} }
转载于:https://www.cnblogs.com/Hilda/archive/2012/08/03/2620842.html
HLG 1506 屠夫和狙击手【判断点在线段上+线段与圆相交】相关推荐
- 如何 判断 设备 是否 连接 上 了 wifi
这里,我给出一个函数 1 public boolean sale_connect_check(WifiConfiguration wcg,Context context) { 2 boolean ju ...
- VC++ 判断点是否在线段上
这算法在一些地方会用到:在GIS中也有: 新建一个单文档工程: 先把窗口标题改一下:如下图定位到文档类OnNewDocument函数: 定位到OnNewDocument()函数,添加setTitle一 ...
- CodeForces 8D Two Friends 判断三个圆相交
题意: 有两个人\(Alan\)和\(Bob\),他们现在都在\(A\)点,现在\(Bob\)想去\(B\)点,\(Alan\)想先到\(C\)点再去\(B\)点. \(Alan\)所走的总路程不能超 ...
- java判断线与矩形相交_判断任意多边形与矩形的相交(线段与矩形相交或线段与线段相交)...
任意多边形与矩形的相交,其实就是判断多条线段是否与这个矩形相交,再简单点就是判断线段是否与矩形的每一条边相交了.那现在,我们先来看看判断一条线段与矩形的其中一条线段的相交的情况(上方水平线): (图形 ...
- 线段的逆时针方向(顺时针、正上方、正下方、线段上)、相交判断(图解)
逆时针方向 给定3个点,构造出从同一起点的两条线段,判断两条线段的关系 这个关系包括逆时针.顺时针.重合,其中重合又包括点在线段正上方.正下方情况! 图示 图中都是以p0为源点,p0p1为基准线,判断 ...
- java如何判断一个点在一条线段上
第一步:数学思路思考: 首先肯定是要先证明该点是在一条直线上,我在上篇文章有介绍,可以去看一下,证明一个点在一条直线上,然后去想如何证明一个点在一条线段上,学数学的时候我们知道,如果一个点在一条线段上 ...
- mysql怎么判断是否断号_怎么判断孩子是否患上多动症?
很多家长都有一个这样的疑问,那就是自己的孩子非常的活泼好动,怎么去判断孩子是否可能患上多动症?这也是很多家长都会有的担心.好动的孩子是不是患有多动症,还是应该符合几项标准的,接下来就让我们一起来了解一 ...
- java实验3 判断二维坐标系中2个圆的位置关系
关键字: Java基本语法 输入输出 算术运算 关系运算 选择语句 内容要求: 编写程序,实现如下功能: 提示用户输入2个圆的圆心坐标和各自的半径值,判断并输出这两个圆之前的位置关系. 两个圆之间的位 ...
- 判断两条直线(线段)的交点问题
要判断两条直线是否有交点首先要求出两直线的斜率,如果相等级两直线平行的话就肯定没有了,反之就一定有了,就可以联立两条直线的方程(我们假定直线的方程都是可以表示出来的),求出两直线的交点然后结果就有了, ...
- 判断大文件是否上传成功(一个大文件上传到ftp,判断是否上传完成)
大文件上传ftp,不知道有没有上传完成,如果没有上传完成另一个程序去下载这个文件,导致下载不完整. 判断一个文件是否上传完成的方法: /*** 间隔一段时间去计算文件的长度来判断文件是否写入完成* @ ...
最新文章
- 剁馅机器人图片_黄金手撕面包培训图片信得过的工艺利润高
- 居民信息管理系统java_基于jsp的社区住户信息管理系统-JavaEE实现社区住户信息管理系统 - java项目源码...
- linux 中shift的用法介绍
- Servlet总结04——注意Servlet单实例的线程安全性
- 笔记本软件页面分辨率低_笔记本最容易忽略的屏幕 有几个参数一定要知道
- 智慧交通day02-车流量检测实现03:辅助功能(交并比and候选框的表现形式)
- java 线程 内存分配内存_漫谈JAVA语言的内存分配
- oracle用户编辑文件中文乱码
- mysql车库管理系统_小区停车管理系统(JSP+JAVA+MySQL)
- Android 选择图片、上传图片之Matisse
- 1--request模块
- APP逆向案例之(一)过 app 更新提示
- MySQL统计排序,同分数同排名
- 舅妈的计算机课第2部,名著课 | 题:《简·爱》(二)
- 安卓桌面整理app_【小编分享】APP整理大法!跟杂乱无章的手机桌面说拜拜~
- 一文带你重新审视CAP理论与分布式系统设计
- 大数据背景下网络信息安全分析探讨
- 1008. 前序遍历构造二叉搜索树
- 非常好用的截图做笔记软件
- 工具类APP的生存之道