题目大意:给四条线段,问能否构成一个矩形?

题目分析:先判断能否构成四边形,然后选一条边,看另外三条边中是否为一条与他平行,两条垂直。

代码如下:

  1. # include<iostream>
  2. # include<cstdio>
  3. # include<cmath>
  4. # include<set>
  5. # include<cstring>
  6. # include<algorithm>
  7. using namespace std;
  8. # define LL long long
  9.  
  10. const double inf=1e20;
  11. const double eps=1e-20;
  12.  
  13. struct Edge
  14. {
  15. LL x,y;
  16. double k;
  17. };
  18. Edge e[4];
  19. set<LL>s;
  20.  
  21. double getK(int i)
  22. {
  23. if(e[i].x==0) return inf;
  24. return (double)e[i].y/(double)e[i].x;
  25. }
  26.  
  27. bool ok(int i,int j)
  28. {
  29. return e[i].x*e[j].x+e[i].y*e[j].y==0ll;
  30. }
  31.  
  32. bool judge()
  33. {
  34. if(s.size()!=4) return false;
  35. int cnt1=0,cnt2=0;
  36. for(int i=1;i<4;++i){
  37. if(ok(0,i)) ++cnt1;
  38. if(e[0].k==e[i].k) ++cnt2;
  39. }
  40. return cnt1==2&&cnt2==1;
  41. }
  42.  
  43. int main()
  44. {
  45. int T;
  46. scanf("%d",&T);
  47. while(T--)
  48. {
  49. LL a,b,c,d;
  50. s.clear();
  51. for(int i=0;i<4;++i){
  52. scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
  53. s.insert(a*100000ll+b);
  54. s.insert(c*100000ll+d);
  55. e[i].x=c-a;
  56. e[i].y=d-b;
  57. e[i].k=getK(i);
  58. }
  59. if(judge()) printf("YES\n");
  60. else printf("NO\n");
  61. }
  62. return 0;
  63. }

  

hihoCoder #1040 (判断是否为矩形)的更多相关文章

  1. Rectangle and Square(判断正方形、矩形)

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=42#problem/D 改了N多次之后终于A了,一直在改判断正方形和矩形那,判断 ...

  2. 判断圆和矩形是否相交C - Rectangle and Circle

    Description Given a rectangle and a circle in the coordinate system(two edges of the rectangle are p ...

  3. HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1221 Rectangle and Circle Time Limit: 2000/1000 MS (J ...

  4. poj 1410 Intersection (判断线段与矩形相交 判线段相交)

    题目链接 Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12040   Accepted: 312 ...

  5. Intersection--poj1410(判断线段与矩形的关系)

    http://poj.org/problem?id=1410 题目大意:给你一个线段和矩形的对角两点  如果相交就输出'T'  不想交就是'F' 注意: 1,给的矩形有可能不是左上 右下  所以要先判 ...

  6. Codeforces Round #587 (Div. 3) C题 【判断两个矩形是否完全覆盖一个矩形问题】 {补题 [差点上分系列]}

    C. White Sheet There is a white sheet of paper lying on a rectangle table. The sheet is a rectangle ...

  7. poj1410(判断线段和矩形是否相交)

    题目链接:https://vjudge.net/problem/POJ-1410 题意:判断线段和矩形是否相交. 思路:注意这里的相交包括线段在矩形内,因此先判断线段与矩形的边是否相交,再判断线段的两 ...

  8. hihoCoder 1040 矩形判断(计算几何)

    http://hihocoder.com/problemset/problem/1040 首先判断四条线段是否相交,给出八个点,如果有一些点重合,并且不同坐标的点只有4个的话,表示可以构成四边形. 然 ...

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

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

随机推荐

  1. Spring学习笔记之Bean的一些属性设置

    1.beans 里边配置default-init-method="shunge",有这个方法的会执行,没有也不会报错 2.beans 里边配置default-destroy-met ...

  2. Asp.net项目因Session阻塞导致页面打开速度变慢

    发现罪魁祸首是Session阻塞造成的.默认情况下session状态是“可写状态”(EnableSessionState=”true”),即当用户打开任何一个页面时,该页面的Session就会持有一个 ...

  3. 《Java实验四》

    //实验4--附录一代码 public class PassValueTest { //静态代码块,类一加载就执行的部分. //所以运行这个程序会输出 class loding static { Sy ...

  4. lightoj1027

    //Accepted 1688 KB 0 ms //概率简单题 //假设我们在n个门前加个起点,在n个门后加个终点,起点可以到达n个门, //为正的门可以到达终点,为负的回到起点 //则假设我们从起点 ...

  5. C#基础--面向过程计算器

    //面向过程计算器 //思路: 需要注意的是: 两个数相除 除数不能为0: //1.提示用户输入 //2.进行运算 //3.得到结果 Console.WriteLine("请输入第一个数字: ...

  6. operation not possible due to RF-kill

    使用mdk3时出现这个问题operation not possible due to RF-kill 就是输入第一条命令 后出现 operation not possible due to RF-ki ...

  7. mac下U盘装机系统的制作(命令行)

    1,不插入U盘和插入U盘分别命令检测硬盘,确定要制作的U盘号:diskutil list 2,卸载usb盘,不推出,diskutil umountDisk /dev/disk1 3,将dmg写入U盘, ...

  8. .a包生成64位

    ./configure  CC="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain ...

  9. MongoDB在Windows下安装及配置

    第一步 下载MongoDB http://www.mongodb.org/downloads 第二步 解压到D:\mongodb\目录下,为了命令行的方便,可以把D:\mongodb\bin加到系统环 ...

  10. magento后台登陆被锁定 索引报错的解决:General error: 1205 Lock wait timeout

    1. magento在索引的时候用shell,有时候会报错: General error: 1205 Lock wait timeout exceeded 这个时候,是因为行锁的原因,在表中您直接用s ...