http://hihocoder.com/problemset/problem/1040

首先判断四条线段是否相交,给出八个点,如果有一些点重合,并且不同坐标的点只有4个的话,表示可以构成四边形。

然后判断每一条线段与其他线段树平行或者垂直,每一条线段都和其他线段平行或垂直的话就能构成矩形。

平行或相交可以用斜率计算,注意斜率不存在或者等于0的情况。

平行斜率相等,垂直的话斜率相乘等于-1,或者一个不存在一个为0.

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
double maxn = ;
struct point
{
int x,y;
}p[]; bool check()
{
int m=;
for(int i=;i<;i++)
for(int j=i+;j<;j++)
if(p[i].x==p[j].x&&p[i].y==p[j].y) m--;
if(m==) return true;
return false;
} double solve(point a,point b)
{
if(a.x==b.x) return maxn;
else if(a.y==b.y) return ;
else return 1.0*(a.y-b.y)/(a.x-b.x);
}
int main()
{
//freopen("a.txt","r",stdin);
int t;
double k[];
scanf("%d",&t);
while(t--)
{
for(int i=;i<;i++) scanf("%d%d",&p[i].x,&p[i].y);
if(check()==) {printf("NO\n");continue;} //检测是否构成四边形
memset(k,,sizeof(k));
int z=;
for(int i=;i<;i+=)
{
k[z++]=solve(p[i],p[i+]); //计算每一条线段的斜率
// printf("%.3lf\n",k[z-1]);
}
bool flag=;
for(int i=;i<;i++)
{ //判断两条线段的关系
for(int j=;j<;j++)
{
if((k[i]==k[j])||(k[i]==maxn&&k[j]==)||(k[i]==&&k[j]==maxn)||(k[i]*k[j]==-)) continue;
else {flag=;break;}
}
if(flag) break;
}
if(flag) printf("NO\n");
else printf("YES\n");
}
return ;
}

hihoCoder 1040 矩形判断(计算几何)的更多相关文章

  1. hihocoder #1040 矩形判断(计算几何问题 给8个点的坐标,能否成为一个矩形 【模板思路】)

    #1040 : 矩形判断 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. 输入 输入第一行是一个整数T ...

  2. HihoCoder - 1040 矩形判断

    矩形判断 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. Input 输入第一行是一个整数T(1<=T<=100),代表测试数据的数量. 每组数据包含4行,每行包含4 ...

  3. hihoCoder #1040 (判断是否为矩形)

    题目大意:给四条线段,问能否构成一个矩形? 题目分析:先判断能否构成四边形,然后选一条边,看另外三条边中是否为一条与他平行,两条垂直. 代码如下: # include<iostream> ...

  4. hihoCoder 1040 矩阵判断 最详细的解题报告

    题目来源:矩阵判断 解题思路: 1.判断矩阵的4个点是否相连,一共输入8个点,只要判断是否4个点是否都经过2遍: 2.判断矩阵中任意一条边与其他边之间要么平行,要么垂直.设A(x1,y1),B(x2, ...

  5. [hihoCoder]矩形判断

    #1040 : 矩形判断 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. 输入 输入第一行是一个整数T ...

  6. Hihocoder 1275 扫地机器人 计算几何

    题意: 有一个房间的形状是多边形,而且每条边都平行于坐标轴,按顺时针给出多边形的顶点坐标 还有一个正方形的扫地机器人,机器人只可以上下左右移动,不可以旋转 问机器人移动的区域能不能覆盖整个房间 分析: ...

  7. hihocoder 1040(矩形判断)

    题目链接:传送门 题目大意:给你四条线段,判断能否围成一个面积大于0的矩形,能输出YES,不能输出NO 题目思路:    合法的四条线段应该满足 1.应该必须有四个不同的点 2.线段斜率分为两组,组内 ...

  8. 容斥 或者 单调栈 hihocoder #1476 : 矩形计数 和 G. Snake Rana 2017 ACM Arabella Collegiate Programming Contest

    先说一个简单的题目(题目大意自己看去,反正中文):hihocoder上的:http://hihocoder.com/problemset/problem/1476 然后因为这个n和m的矩阵范围是100 ...

  9. BZOJ 1185 [HNOI2007]最小矩形覆盖 ——计算几何

    程序写的太垃圾,卡不过去. GG,甘拜下风. #include <map> #include <cmath> #include <queue> #include & ...

随机推荐

  1. Matlab画柱状和折线对照图

        上面是效果图,看着很不错吧,主要的问题在于用XTickLabel设置横坐标时候,横坐标会扩展,就是说如果label是[1 2 3],咱就做了三组试验,参数分别是 1 2 3,但是显示是1 2 ...

  2. matrix_world_final_2012

    B http://acm.hust.edu.cn/vjudge/contest/view.action?cid=98759#problem/B 题意:瓶子侧躺在数轴上,瓶底在xlow,瓶口在xhigh ...

  3. SQL Server表分区案例

    --学习创建表分区脚本/*SQL SERVER 2005中以上版本,终于引入了表分区,就是说,当一个表里的数据很多时,可以将其分拆到多个的表里,大大提高了性能.下面举例子说明之*/ --------- ...

  4. Windows7 64位安装配置Apache2.4+PHP5.4+MySQL5.5+Xdebug

    PHP更新已经到了5.4.7了,之前是用PHPstudy安装的PHP5.2.13版本,今天有空,就把之前的集成安装卸载了.换上了新一代PHP,记录一下.. 环境:Windows7 64位(内部版本76 ...

  5. WARNING: Calls to any function that may require a gradient calculation inside a conditional block may return undefined results

    GLES2.0: Some device will give a warning on compling shaders(yet the compling will succeed), and the ...

  6. CocoaPods 使用手册

    CocoaPods 使用手册 CocoaPods 使用手册                                                                        ...

  7. ubuntu 安装完成后的工作

    以安装 ubuntu 15.10 为例 1. 备份并更改源 cd /etc/apt sudo cp source.list source.list.bak sudo vi source.list 删除 ...

  8. Topcoder srm 632 div2

    脑洞太大,简单东西就是想复杂,活该一直DIV2; A:水,基本判断A[I]<=A[I-1],ANS++; B:不知道别人怎么做的,我的是100*N*N;没办法想的太多了,忘记是连续的数列 我们枚 ...

  9. 首次发布App,In-App Purchase 无法submit for review 问题的解决方案

    原地址:http://blog.csdn.net/blucenong/article/details/7819195 一个IDP首次create app 然后首次create new IAP的时候,我 ...

  10. MFC单文档程序结构

    MFC单文档程序结构三方面: Doc MainFrame View