51Nod - 1298
第1行:一个数T,表示输入的测试数量(1 <= T <= 10000),之后每4行用来描述一组测试数据。 4-1:三个数,前两个数为圆心的坐标xc, yc,第3个数为圆的半径R。(-3000 <= xc, yc <= 3000, 1 <= R <= 3000) 4-2:2个数,三角形第1个点的坐标。 4-3:2个数,三角形第2个点的坐标。 4-4:2个数,三角形第3个点的坐标。(-3000 <= xi, yi <= 3000)
共T行,对于每组输入数据,相交输出"Yes",否则输出"No"。
2 0 0 10 10 0 15 0 15 5 0 0 10 0 0 5 0 5 5
Yes No
思路:直线与圆相交的关系,不明白的点击打开链接
ACDAIMA:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
#define M 1010
#define LL long long
struct node
{LL x, y;
};
node no[3];
node c;
LL rl[3], r;
bool judge(node a, node b)//判断线段是否与圆相交
{LL al, bl, cl, num1, num2;//化成ax+by+c=0,找到a,b,c的值if(a.x == b.x){al=1, bl=0, cl=-a.x;}else if(a.y == b.y){al=0, bl=1, cl=-a.y;}else{al = b.y - a.y;bl = a.x - b.x;cl = b.x*a.y - a.x*b.y;}//点到直线的距离,判断直线是否可以与圆相交num1 = al*c.x + bl*c.y + cl;num1 *= num1;num2 = r*r*(al*al+bl*bl);if(num2 < num1){return 0;}//向量的计算LL angle1 = (c.x-a.x)*(b.x-a.x) + (c.y-a.y)*(b.y-a.y);//线段与圆是否相交的条件LL angle2 = (c.x-b.x)*(a.x-b.x) + (c.y-b.y)*(a.y-b.y);if(angle1>0 && angle2>0){return 1;}return 0;
}
int main()
{int t;scanf("%d", &t);while(t--){scanf("%lld%lld%lld", &c.x, &c.y, &r);for(int i=0; i<3; i++){scanf("%lld%lld", &no[i].x, &no[i].y);rl[i] = (no[i].x-c.x)*(no[i].x-c.x)+(no[i].y-c.y)*(no[i].y-c.y);rl[i] = rl[i] - r*r;}//有点在圆上if(!rl[0] || !rl[1] || !rl[2]){printf("Yes\n");continue;}//三个点都在圆内if(rl[0]<0&&rl[1]<0&&rl[2]<0){printf("No\n");continue;}//三个点都在圆外,特殊判断if(rl[0]>0&&rl[1]>0&&rl[2]>0){if(judge(no[0], no[1]) || judge(no[0], no[2]) || judge(no[1], no[2])){printf("Yes\n");}else{printf("No\n");}}else{printf("Yes\n");}}return 0;
}
51Nod - 1298相关推荐
- 51Nod - 1298(点到线段的距离)
链接:51Nod - 1298 题意: 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于 ...
- 51Nod 1298 圆与三角形
题目链接: 51Nod 1298 圆与三角形 题目描述: 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No". ...
- 51Nod 1298 圆与三角形相交 计算几何
51Nod-1298-圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). ...
- 51nod 1298 圆与三角形
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三 ...
- 51nod 1298
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三 ...
- 51nod 1298:圆与三角形(计算几何)
题目链接 判断圆和三角形是否相交 可以转化为 判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...
- (图论)51NOD 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数T,表示输入 ...
- 51nod 1298 圆与三角形(几何知识)
Description 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). Inpu ...
- vanilla js_用Vanilla js编写前端组件
vanilla js There's so much hype these days around front-end frameworks (React, Angular, Vue) that I ...
最新文章
- 认知学习法-学习笔记
- JavaScript权威指南(第六版) 初读笔记
- python中sys用法_python中os和sys模块的区别与常用方法总结
- Servlet3.0 multipart 文件上传技术
- python列表推导式格式_Python列表推导式(for表达式)及用法
- logback日志模板与详解
- [C#] NPOI Excel解析
- opencv3.4.0在ubuntu16.04上的安装
- 该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏。 配置文件: D:\instractPath\Developmen
- java cas原理_Java中的锁[原理、锁优化、CAS、AQS]
- Atitit. Class 元数据的反射操作 api apache 工具
- melogin.cn主页登录_melogincn首页 melogin·cn登录页面入口
- Matlab使用EMD
- 2021牛客多校10F Train Wreck (贪心,思维题)
- Google浏览器设置不自动更新:关闭谷歌浏览器自动更新方法(总是自动更新提示失败)
- zabbix为啥持续报警
- Python 批量转换视频音频采样率(附代码) | Python工具
- 敏捷下的scrim、xp、3355、TDD、BDD、CI、DI及四个仪式、十二原则汇总
- 如何将Excel多行单元格文字合并到一个单元格中
- i7 10700和10700f 10700k这三个CPU有什么区别