51Nod 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出"Yes",否则输出"No"。(三角形的面积大于0)。


第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
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#define lowbit(x) (x&(-x))
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.141592653589793238462
#define ios() ios::sync_with_stdio(false)
#define INF 1044266558
#define mem(a) (memset(a,0,sizeof(a)))
typedef long long ll;
ll r,n;
struct Node
{
ll x;
ll y;
}node[];
ll dist(Node a,Node b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
bool check(Node a,Node b)
{
if(((a.y-node[].y)*(a.y-b.y)+(a.x-node[].x)*(a.x-b.x))>=&&((b.y-node[].y)*(b.y-a.y)+(b.x-node[].x)*(b.x-a.x))>=) return true;
return false;
}
int fun(Node a,Node b)
{
if(dist(node[],node[])<r*r && dist(node[],node[])<r*r && dist(node[],node[])<r*r) return ;
else if((dist(node[],node[])<=r*r|| dist(node[],node[])<=r*r || dist(node[],node[])<=r*r) && (dist(node[],node[])>=r*r|| dist(node[],node[])>=r*r || dist(node[],node[])>=r*r)) return ;
else
{
if(((b.y-a.y)*node[].x-node[].y*(b.x-a.x)+b.x*a.y-a.x*b.y)*((b.y-a.y)*node[].x-node[].y*(b.x-a.x)+b.x*a.y-a.x*b.y)>r*r*((b.y-a.y)*(b.y-a.y)+(a.x-b.x)*(a.x-b.x))) return ;
else if(check(a,b)) return ;
}
}
int main()
{
scanf("%lld",&n);
while(n--)
{
scanf("%lld%lld%lld",&node[].x,&node[].y,&r);
for(int i=;i<=;i++)
scanf("%lld%lld",&node[i].x,&node[i].y);
if(fun(node[],node[]) || fun(node[],node[]) || fun(node[],node[])) printf("Yes\n");
else printf("No\n");
}
return ;
}
/*
5
-2 -1 1
1 -2
-1 0
-2 0
0 -1 1
-1 -1
1 1
1 -2
-1 1 1
-2 -2
0 1
-1 -2
-2 -1 1
-1 0
0 0
1 -2
0 -1 1
1 0
1 1
-1 -2
*/
/*
Yes
Yes
Yes
No
Yes
*/
51Nod 圆与三角形的更多相关文章
- 51Nod 1298 圆与三角形(计算几何)
1298 圆与三角形 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes&quo ...
- 51nod 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数 ...
- (图论)51NOD 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数T, ...
- 51nod 1298:圆与三角形(计算几何)
题目链接 判断圆和三角形是否相交 可以转化为 判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...
- 51nod-1298 圆与三角形(计算几何超详解)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是 ...
- 51nod1298圆与三角形——(二分法)
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同 ...
- 51nod_1298:圆与三角形(计算几何)
题目链接 判断圆和三角形是否相交 可以转化为 判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...
- (点到线段的最短距离)51nod1298 圆与三角形
1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 收起 ...
- 牛客网 牛客小白月赛1 E.圆与三角形-公式题
E.圆与三角形 链接:https://www.nowcoder.com/acm/contest/85/E来源:牛客网 这个题把公式推一下, 发现就是1+sinA*r,sinA最大为1,所以 ...
随机推荐
- sql索引碎片产生的原理 解决碎片的办法(sql碎片整理)
本文讲述了SQL SERVER中碎片产生的原理,内部碎片和外部碎片的概念.以及解决碎片的办法和填充因子.在数据库中,往往每一个对于某一方面性能增加的功能也会伴随着另一方面性能的减弱.系统的学习数据库知 ...
- ACM-ICPC 2017 Asia Urumqi(第八场)
A. Coins Alice and Bob are playing a simple game. They line up a row of nnn identical coins, all wit ...
- 我的 Linux 主目录中的隐藏文件是干什么用的?
作者: Alexander Fox 译者: LCTT MjSeven 在 Linux 系统中,你可能会在主目录中存储了大量文件和文件夹.但在这些文件之外,你知道你的主目录还附带了很多隐藏的文件和文件夹 ...
- [NOIP2012提高组]国王游戏
题目:洛谷P1080.Vijos P1779.codevs1198. 题目大意:国王和每个大臣左.右手各写了一个数.规定每个大臣得到的金币数为他前面所有人左手的数字的乘积除以他自己右手的数(向下取整) ...
- 关联Anaconda和最新Pycharm2018.3.2
在Anaconda和Pycharm 2018.3.2 x64都安装好之后,进行Anaconda 与Pycharm的关联操作 首先File -->New Project 打开以后切记要把Proje ...
- linux虚拟机拓展大小
http://blog.csdn.net/wutong_login/article/details/40147057?utm_source=tuicool http://www.linuxidc.co ...
- Unity UGUI——UI基础,Canvas
主题:画布--Canvas 内容:创建Canvas UI控件的绘制顺序 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5 ...
- SQLServer2008 R2安装步骤
1.解压缩sqlserver_2008_r2.iso到指定的目录,记住这个目录的位置 sqlserver_2008_r2.iso下载位置是:http://download.csdn.net/u0123 ...
- BZOJ 1050 枚举+并查集
思路: 枚举最大边 像Kruskal一样加边 每回更新一下 就搞定了- //By SiriusRen #include <cstdio> #include <cstring> ...
- HDU 4372 Count the Buildings 组合数学
题意:有n个点上可能有楼房,从前面可以看到x栋楼,从后面可以看到y栋,问楼的位置有多少种可能. 印象中好像做过这个题,