简单计算一下k,一道水题,只是没有数学理论基础就十分难受本人开始20分钟就是如此
#include<bits/stdc++.h> using namespace std; int t; double k[5][5]; struct node{ int x,y; }a[5]; bool cmp(node p,node q){ if (p.x>q.x) return false; if (p.x==q.x&&p.y>q.y) return false; return true; } int main(){ scanf("%d",&t); while(t--){ for(int i=1;i<=4;i++)scanf("%d %d",&a[i].x,&a[i].y); sort(a+1,a+5,cmp); for(int i=1;i<=4;i++){ for(int j=i+1;j<=4;j++){ if(a[i].x==a[j].x&&a[i].y==a[j].y){ printf("NO\n"); goto hyf; } if(a[i].x==a[j].x)k[i][j]=2147483647; else k[i][j]=(a[i].y-a[j].y)*1.0/(a[i].x-a[j].x); } } if(fabs(k[1][2]-k[3][4])<=1e-15&&fabs(k[1][3]-k[2][4])<=1e-15&&k[1][2]!=k[1][3])printf("YES\n"); else printf("NO\n"); hyf:; } }