CF上提示说存在把"NO"判成"YES"的情况
但是看了看实在是不知道哪里出错了
对拍也不好造数据
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<map>
using namespace std;
int T;
bool flag;
struct Node
{
int ax,ay,bx,by;
}e[10];
bool check()
{
bool flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
if(e[1].ax==e[2].ax&&e[1].ay==e[2].ay) flag1=1;
if(e[1].ax==e[2].bx&&e[1].ay==e[2].by) flag2=1;
if(e[1].bx==e[2].ax&&e[1].by==e[2].ay) flag3=1;
if(e[1].bx==e[2].bx&&e[1].by==e[2].by) flag4=1;
if(flag1||flag2||flag3||flag4)//第1.2条线段存在一个端点重合
{
if(flag2) swap(e[2].ax,e[2].bx),swap(e[2].ay,e[2].by);
if(flag3) swap(e[1].ax,e[1].bx),swap(e[1].ay,e[1].by);
if(flag4) swap(e[1].ax,e[1].bx),swap(e[1].ay,e[1].by),swap(e[2].ax,e[2].bx),swap(e[2].ay,e[2].by);
int xx=e[1].bx-e[1].ax,xy=e[1].by-e[1].ay;
int yx=e[2].bx-e[2].ax,yy=e[2].by-e[2].ay;
if((xx*yy-xy*yx)!=0&&xx*yx+xy*yy>=0)//二者大于0°小于等于90°
{
int minax=min(e[1].ax,e[1].bx),minay=min(e[1].ay,e[1].by);
int maxax=max(e[1].ax,e[1].bx),maxay=max(e[1].ay,e[1].by);
int minbx=min(e[2].ax,e[2].bx),minby=min(e[2].ay,e[2].by);
int maxbx=max(e[2].ax,e[2].bx),maxby=max(e[2].ay,e[2].by);
if(e[3].ax>=minax&&e[3].ax<=maxax&&e[3].ay>=minay&&e[3].ay<=maxay&&e[3].bx>=minbx&&e[3].bx<=maxbx&&e[3].by>=minby&&e[3].by<=maxby)
{//防止出现位于延长线上
int nax,nay,nbx,nby,kax,kay,kbx,kby;
nax=e[3].ax-e[1].ax;nbx=e[1].bx-e[3].ax;
nay=e[3].ay-e[1].ay;nby=e[1].by-e[3].ay;
kax=e[3].bx-e[2].ax;kbx=e[2].bx-e[3].bx;
kay=e[3].by-e[2].ay;kby=e[2].by-e[3].by;
if(nax*nby==nbx*nay&&kax*kby==kbx*kay)//第3条线段端点分别位于两条线段之上
if(4*min(abs(nax),abs(nbx))>=max(abs(nax),abs(nbx))&&4*min(abs(kax),abs(kbx))>=max(abs(kax),abs(kbx))&&4*min(abs(nay),abs(nby))>=max(abs(nay),abs(nby))&&4*min(abs(kay),abs(kby))>=max(abs(kay),abs(kby)))
//较小长度与较大长度比值大于1/4
flag5=1;
}
swap(e[3].ax,e[3].bx);swap(e[3].ay,e[3].by);
if(e[3].ax>=minax&&e[3].ax<=maxax&&e[3].ay>=minay&&e[3].ay<=maxay&&e[3].bx>=minbx&&e[3].bx<=maxbx&&e[3].by>=minby&&e[3].by<=maxby)
{
int nax,nay,nbx,nby,kax,kay,kbx,kby;
nax=e[3].ax-e[1].ax;nbx=e[1].bx-e[3].ax;
nay=e[3].ay-e[1].ay;nby=e[1].by-e[3].ay;
kax=e[3].bx-e[2].ax;kbx=e[2].bx-e[3].bx;
kay=e[3].by-e[2].ay;kby=e[2].by-e[3].by;
if(nax*nby==nbx*nay&&kax*kby==kbx*kay)
if(4*min(abs(nax),abs(nbx))>=max(abs(nax),abs(nbx))&&4*min(abs(kax),abs(kbx))>=max(abs(kax),abs(kbx))&&4*min(abs(nay),abs(nby))>=max(abs(nay),abs(nby))&&4*min(abs(kay),abs(kby))>=max(abs(kay),abs(kby)))
flag5=1;
}
return flag5;
}
else return 0;
}
else return 0;
}
int main()
{
scanf("%d",&T);
while(T--)
{
flag=0;
for(int i=1;i<=3;++i) scanf("%d%d%d%d",&e[i].ax,&e[i].ay,&e[i].bx,&e[i].by);
if(check()) flag=1;
swap(e[3],e[1]);
if(check()) flag=1;
swap(e[3],e[2]);
if(check()) flag=1;
puts(flag ? "YES":"NO");
}
return 0;
}