题目大意:
一堆机器人,已知他们的初始位置(x,y),本来都可以向四个方向移动,但是一些原因,一个机器人的不能向某些方向移动,该方向能移动用1表示,否则用0
求他们能否到达同一点,如果能,输出这个点坐标
思路:维护四个最值,a,b,c,d
a表示这群机器人能到达的左移x坐标的下界,b表示能上移y的上界,c表示右移x的上界,d表示下移y的下界
每次遇到机器人某方向不能移动,更新相应值。
最后判断上界下界的交是否非空
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define pair<int,int> P #define endl '\n' #define MAXN 100006 int n,m; #define read(A) for(int i=0;i<n;i++)scanf("%I64d",&A[i]); ll x,y; ll a=-MAXN+6, b=MAXN-6,c=MAXN-6, d=-MAXN+6; int main() { int t; scanf("%d",&t); int _a; while(t--){ a=-MAXN+6, b=MAXN-6,c=MAXN-6, d=-MAXN+6; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%I64d%I64d",&x,&y); for(int j=0;j<4;j++){ scanf("%d",&_a); if(j==0&&_a==0)a=max(x,a); if(j==1&&_a==0)b=min(b,y); if(j==2&&_a==0)c=min(c,x); if(j==3&&_a==0)d=max(d,y); } } if(a>c||b<d){ // cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl; puts("0"); } else{ cout<<1<<' '<<a<<' '<<b<<'\n'; } } }