几何思维判断( 迎风一刀斩)

#pragma GCC optimize(3,"Ofast","inline")
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll; 
#define int long long
#define ld long double
int flag;
#define pb(x) push_back(x);
vector<int>v[2],n,len;
void deal(vector<int>a,vector<int>b,int id){
    int sz=a.size();//顶点数量
    set<int>st;
    for(int i=0;i<sz;i++)
    //斜边
    if(a[i]!=a[(i+1)%sz]&&b[i]!=b[(i+1)%sz]){
            st.insert((i+1)%sz);
            st.insert(i);
            if(sz==4)//四边形的斜边腰长度
            //斜边腰,必与坐标轴平行
            len.pb(abs(a[(i+2)%4]-a[(i+3)%4])+abs(b[(i+2)%4]-b[(i+3)%4]));
        }
    if(st.size()==0) {//是矩形
        v[id].pb(abs(a[2]-a[0]));//高
        v[id].pb(abs(b[2]-b[0]));//长
        flag++;
    }else{
        for(int i : st){//斜边的点
            v[id].pb(a[i]);
            v[id].pb(b[i]);
        }
    }
}
bool zhen(){
    //属于两个多边形的顶点个数
    if(n[0]<6&&n[1]<6&&n[0]+n[1]<9) {
        if(flag==2){//两个矩形
        int a=v[0][0],b=v[0][1];
        int c=v[1][0],d=v[1][1];
        if(a==c||a==d||b==c||b==d){
            //两个矩形可以合成一个矩形
            return 1;
        }
        }else if(flag==0){
            if(v[0].size()==4&&v[1].size()==4){
                //都有一个斜边
                if(n[0]==4&&n[1]==4&&len[0]!=len[1])
                    //都是四边形,但是斜边腰不相等
                    return 0;
                //特判直角腰,斜边的dx轴,dy轴是否相等
                int a=abs(v[0][2]-v[0][0]),b=abs(v[0][3]-v[0][1]); if(a>b) swap(a,b);
                int c=abs(v[1][2]-v[1][0]),d=abs(v[1][3]-v[1][1]); if(c>d) swap(c,d);
                if(a==c&&b==d) {return 1;}  
            }
        }
    }
    return 0;
}
void solve()
{
    flag=0,n.clear(),len.clear();
    for(int i=0;i<2;i++){
        v[i].clear();
        int k;cin>>k;
        n.pb(k);
        vector<int>a(k),b(k);
        for(int i=0;i<k;i++)
        cin>>a[i]>>b[i];
        deal(a,b,i);

    }
    if(zhen()) {cout<<"YES\n";}
        else cout<<"NO\n";
}
signed main()
{
    ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
 int t;cin>>t;
    while(t--)
    solve();
    return 0;
}