cf14C Four Segments(计算几何)
题意:
给四个线段(两个端点的坐标)。
判断这四个线段能否构成一个矩形。(矩形的四条边都平行于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(计算几何)的更多相关文章
- HDU 6697 Closest Pair of Segments (计算几何 暴力)
2019 杭电多校 10 1007 题目链接:HDU 6697 比赛链接:2019 Multi-University Training Contest 10 Problem Description T ...
- POJ 3304 Segments(计算几何)
意甲冠军:给出的一些段的.问:能否找到一条直线,通过所有的行 思维:假设一条直线的存在,所以必须有该过两点的线,然后列举两点,然后推断是否存在与所有的行的交点可以是 代码: #include < ...
- poj3304 Segments【计算几何】
C - Segments POJ - 3304 最近开始刷计算几何了 公式好多完全不会 数学不行 几何不行 记忆力不行 当机 查的题解 就当复习吧 这套专题拿来熟悉一下计算几何模板 #include ...
- 2018.07.04 POJ 3304 Segments(简单计算几何)
Segments Time Limit: 1000MS Memory Limit: 65536K Description Given n segments in the two dimensional ...
- POJ 3304 Segments(计算几何:直线与线段相交)
POJ 3304 Segments 大意:给你一些线段,找出一条直线可以穿过全部的线段,相交包含端点. 思路:遍历全部的端点,取两个点形成直线,推断直线是否与全部线段相交,假设存在这种直线,输出Yes ...
- [转] POJ计算几何
转自:http://blog.csdn.net/tyger/article/details/4480029 计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板 ...
- USACO6.5-Closed Fences:计算几何
Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N c ...
- ACM计算几何题目推荐
//第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...
- 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 ...
随机推荐
- idea鼠标双击.log日志文件无法打开
发现只要再mybatis-config.xml的起别名中加<package name="xxx"/>,就会导致Reader entry: ���� 1 n乱码,而R ...
- CodeForce-812B Sagheer, the Hausmeister(DFS)
Sagheer, the Hausmeister CodeForces - 812B 题意:有一栋楼房,里面有很多盏灯没关,为了节约用电小L决定把这些灯都关了. 这楼有 n 层,最左边和最右边有楼梯. ...
- discuz连接微博登陆,第三方登录
首先记一下discuz的ucenter的架构: ucenter 是用户中心.其他的应用都是和ucenter连接,包括discuz也是ucenter的一个应用(默认的); 第一步: 在ucenter新建 ...
- symfony2 数据库原生查询
1. 数组,没有键名 但只查询出第一个结果 $conn = $this->getDoctrine()->getConnection(); $data = $conn->fetchAr ...
- Ubuntu18.04 安装Tomcat 8.5
下载tomcat,登陆官网:https://tomcat.apache.org/ 点击tar.gz后,弹出这个不大懂这是什么? tomcat要求的jdk版本 解压tar包 sudo tar zxvf ...
- flask项目在Linux运行
依赖安装: 1.flask 2.flask_sqlalchemy --需要安装flask-mysqldb 安装时提示mysql_config not found ,使用:yum install my ...
- centos7 设置dns
查看当前网络连接 nmcli connection show NAME UUID TYPE DEVICE eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 802-3 ...
- JVM-直接内存(Direct Memory)
1.直接内存概述 直接内存不是虚拟机运行时数据区的一部分,也不是<Java虚拟机规范>中定义的内存区域. 直接内存是在Java堆外的,直接向系统申请的内存区间. 来源于NIO,通过存在堆中 ...
- Spring自动装配歧义性笔记
Spring自动装配歧义性笔记 如果系统中存在两个都实现了同一接口的类,Spring在进行@Autowired自动装配的时候,会选择哪一个?如下: // 一下两个类均被标记为bean @Compone ...
- IL合集
由于之前写的表达式树合集,未编写任何注释且是以图片的形式展现给大家,在这里向各位看官道歉了,接下来为大家奉上新鲜出炉的香喷喷的IL合集,后面会持续更新,各位看官点关注不迷路,之前答应的手写IOC以及多 ...