575 div 3 C. Robot Breakout

C. Robot Breakout

题目大意:

一堆机器人,已知他们的初始位置(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 '
'
#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<<'
';
        }
    }
 
}
原文地址:https://www.cnblogs.com/liulex/p/11248151.html