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 ...
随机推荐
- CentOS7下编译安装redis-5.0.9
CentOS7下编译安装redis-5.0.9 本文地址http://yangjianyong.cn/?p=171转载无需经过作者本人授权 下载redis #code start wget https ...
- swiper-wrapper轮滑组件(多组轮滑界面)间隔无效问题
在多组此种轮滑效果出现时,你需要加两个属性值,即 new Swiper('.swiper-container', { slidesPerView: 3, slidesPerColumn: 2, spa ...
- Java基础系列(19)- Switch结构
package struct; public class SwitchDemo01 { //case穿透 //switch 匹配一个具体的值 public static void main(Strin ...
- CI框架 ::集成极光推送
分三步 1:引入类: 2:新建Jpush类: 3:修改源码(PHP5.3.3环境)
- re.findall用法
其中,re.findall() 函数可以遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表. 在python源代码中,展示如下: 搜索string,返回一个顺序访问每一个匹配结果(Match对象 ...
- P4100-[HEOI2013]钙铁锌硒维生素【矩阵求逆,最大匹配】
正题 题目链接:https://www.luogu.com.cn/problem/P4100 题目大意 给出\(n\)个线性无关的向量\(A_i\),然后给出\(n\)个向量\(B_i\),求一个字典 ...
- P2179-[NOI2012]骑行川藏【导数,二分】
正题 题目链接:https://www.luogu.com.cn/problem/P2179 题目大意 给出\(E\)和\(n\)个\(s_i,k_i,u_i\)求一个序列\(v_i\)满足 \[\s ...
- 深入浅出WPF-06.Binding(绑定)02
Binding对数据的校验和转换 1)数据校验,通过Binding的ValidationRules属性(Collection类型)进行校验.可以设置多个数据校验条件. <Slider Margi ...
- bug 找不到或无法加载主类main.java.*
开发时遇到的的一个问题,不知道是什么引起的,一个maven springboot 的项目,主类启动的时候报错,说没找到 主类,起先怀疑是springboot的问题,随手写一个单独的类,有main方法, ...
- 踩坑系列《五》 Incorrect datetime value: 时间添加失败原因
在进行单元测试中通过 new Date() 方式添加时间时,报了 Data truncation: Incorrect datetime value:这样的错误(我数据库表的时间类型是 datetim ...