维护合法区域的四个边 $xa,ya,xb,yb$
表示在以 $(xa,ya)$ 为左下角,以 $(xb,yb)$ 为右上角的矩形内的点都是合法答案
对于一个起点 $(x,y)$,如果没法往左,那么 $xa$ 就不能小于 $x$ ,如果没法往右,那么 $xb$ 就不能大于 $x$
反之可以,十分显然
对于 $y$ 也是同样的讨论一下即可
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; typedef long long ll; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*f; } const int N=2e5+7; int Q,n; int main() { Q=read(); while(Q--) { n=read(); int xa,ya,xb=-100000,yb=-100000,xc=100000,yc=100000; for(int i=1;i<=n;i++) { xa=read(),ya=read(); if(!read()) xb=max(xb,xa); if(!read()) yc=min(yc,ya); if(!read()) xc=min(xc,xa); if(!read()) yb=max(yb,ya); } if(xb>xc||yb>yc) { printf("0 "); continue; } printf("1 %d %d ",xb,yb); } return 0; }