题意:

给四个线段(两个端点的坐标)。

判断这四个线段能否构成一个矩形。(矩形的四条边都平行于X轴或Y轴)

思路:

计算几何

代码:

class Point{
public:
int x,y;
void readd(int xx,int yy){
x=xx;
y=yy;
}
}; class Segment{
public:
Point startt,endd;
int length;
int Type; //1:横 2:竖 -1:斜
void readd(int x1,int y1,int x2,int y2){
startt.readd(x1,y1);
endd.readd(x2,y2);
length=(int)sqrt((double)(x2-x1)*(x2-x1)+(double)(y2-y1)*(y2-y1));
}
int typeCheck(){
Type=-1;
if(startt.x==endd.x){
Type=2;
}
if(startt.y==endd.y){
Type=1;
}
}
};
Segment S[5]; bool samePoint(Point a,Point b){
if(a.x==b.x&&a.y==b.y){
return true;
}
return false;
} bool solve(){
if(S[1].startt.y<S[2].startt.y){
swap(S[1],S[2]);
}
if(S[1].startt.x>S[1].endd.x){
swap(S[1].startt,S[1].endd);
}
if(S[2].startt.x>S[2].endd.x){
swap(S[2].startt,S[2].endd);
} if(S[3].startt.x>S[4].startt.x){
swap(S[3],S[4]);
}
if(S[3].startt.y<S[3].endd.y){
swap(S[3].startt,S[3].endd);
}
if(S[4].startt.y<S[4].endd.y){
swap(S[4].startt,S[4].endd);
}
if(samePoint(S[1].startt,S[3].startt)&&
samePoint(S[1].endd,S[4].startt)&&
samePoint(S[3].endd,S[2].startt)&&
samePoint(S[2].endd,S[4].endd)
){
return true;
} return false;
} bool cmp1(Segment a,Segment b){
return a.Type<b.Type;
}
int main(){ rep(i,1,4){
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
S[i].readd(x1,y1,x2,y2);
S[i].typeCheck();
}
rep(i,1,4){
if(S[i].length==0 || S[i].Type==-1){
puts("NO");
return 0;
}
}
sort(S+1,S+5,cmp1);
if(!(S[1].length==S[2].length&&S[3].length==S[4].length)){
puts("NO");
return 0;
}
if(solve()){
puts("YES");
}
else{
puts("NO");
}
return 0;
}

cf14C Four Segments(计算几何)的更多相关文章

  1. HDU 6697 Closest Pair of Segments (计算几何 暴力)

    2019 杭电多校 10 1007 题目链接:HDU 6697 比赛链接:2019 Multi-University Training Contest 10 Problem Description T ...

  2. POJ 3304 Segments(计算几何)

    意甲冠军:给出的一些段的.问:能否找到一条直线,通过所有的行 思维:假设一条直线的存在,所以必须有该过两点的线,然后列举两点,然后推断是否存在与所有的行的交点可以是 代码: #include < ...

  3. poj3304 Segments【计算几何】

    C - Segments POJ - 3304 最近开始刷计算几何了 公式好多完全不会 数学不行 几何不行 记忆力不行 当机 查的题解 就当复习吧 这套专题拿来熟悉一下计算几何模板 #include ...

  4. 2018.07.04 POJ 3304 Segments(简单计算几何)

    Segments Time Limit: 1000MS Memory Limit: 65536K Description Given n segments in the two dimensional ...

  5. POJ 3304 Segments(计算几何:直线与线段相交)

    POJ 3304 Segments 大意:给你一些线段,找出一条直线可以穿过全部的线段,相交包含端点. 思路:遍历全部的端点,取两个点形成直线,推断直线是否与全部线段相交,假设存在这种直线,输出Yes ...

  6. [转] POJ计算几何

    转自:http://blog.csdn.net/tyger/article/details/4480029 计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板 ...

  7. USACO6.5-Closed Fences:计算几何

    Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N c ...

  8. ACM计算几何题目推荐

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

  9. hdu 1086:You can Solve a Geometry Problem too(计算几何,判断两线段相交,水题)

    You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3 ...

随机推荐

  1. layui日期选择无效的问题

    解决layui引入时间控件无效的问题 - 简书 (jianshu.com) 原因是因为在使用日期选择器的时候,layui源码里有一个laydate.css文件找不到 将下载的文档文件里的css文件夹, ...

  2. 安卓开发 利用百度识图api进行物体识别

    前文 之前的随笔中,已经通过相机或相册获取到了我们想要的图片,接下来进行识图api的配置工作.我使用的是百度的api,利用python获取信息,并在MainActivity中进行调用来输出信息. 一. ...

  3. 关于在.H文件中定义变量

    KEIL中,在".H"文件定义变量. 如果该".H"文件同时被两个".C"文件调用,则会出现重复定义错误(*** ERROR L104: M ...

  4. Shell系列(25)- 条件判断之文件权限

    按照文件权限进行判断 读.写.执行等选项权限,只要有,就返回真 不会按照所属者,所属用户组,其他用户进行区分 先判断文件是否存在,再去判断选项权限 测试选项 作用(标红熟记) -r 文件 判断该文件是 ...

  5. shell脚本中 /dev/null 的用途

    /dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据 可以将它 视为一个黑洞, 它等效于只写文件, 写入其中的所有内容都会消失, 尝试从中读取或输出不会有任何结果,同样,/dev/nul ...

  6. Matlab使用随记

    Matlab 2020 想要看图像每一点的值大小 工具--->数据提示 想要导出的分辨率提高 导出设置--->渲染--->600dpi Matlab 2017b 程序运行后,画出图, ...

  7. maven编译打包

    sonar扫描java项目,需要使用maven 来到maven项目下第一件事情编译打包,注意代码扫描是在编译之后的:https://blog.csdn.net/qq_34556414/article/ ...

  8. mapper-spring-boot-starter 主要作用是

    今天是第一次接触到 这个场景启动器内心中真是一片的茫然,学习了这么长时间我居然还不知道有这个的存在今天好好查一查资料 参考资料(https://blog.csdn.net/crq1205/articl ...

  9. libcurl 概述(翻译)

    l名称 libcurl 客户端 URL 传输 描述 这是一个如何使用libcurl进行C语言编程的简短概述.这里提到的每个功能都有特定的手册页.还有 libcurl-easy 手册页,libcurl- ...

  10. P5056-[模板]插头dp

    正题 题目链接:https://www.luogu.com.cn/problem/P5056 题目大意 \(n*m\)的网格,求有多少条回路可以铺满整个棋盘. 解题思路 插头\(dp\)的,写法是按照 ...