#575ラウンドCodeforces(本部3。)C - ロボットブレイクアウト

#575(DIV。3)ラウンドCodeforces

 

C - ロボットのブレイクアウト

n個のロボットがあなたの研究室から脱出してきました!これらのロボットは実験しているので、あなたは、できるだけ早くそれらを見つける必要があり、そして彼らの行動は、まだテストされていないので、彼らは本当に危険かもしれません!

幸いなことに、あなたのロボットが脱出しているにもかかわらず、あなたはまだそれらをある程度制御を持っています。あなたが住んでいる世界が座標平面の無限としてモデル化することができ、かつi番目のロボットは、現在座標(Xi、Yi)を持つ点に位置しています:まず第一に、あなたは、各ロボットの位置を知っています。さらに、あなたはすべてのロボットに正確に一つのコマンドを送信することができます。コマンドは、2つの整数XおよびYを含むべきで、各ロボットがこのコマンドを受信すると、座標(X、Y)を有する点に向かって移動を開始します。ロボットは2例で、その動きを停止します。

  • それは(X、Y)に達するのいずれか。
  • またはそれは、任意の近い(X、Y)を取得することはできません。

通常、すべてのロボットは、他の点に座標平面の任意の点から取得することができなければなりません。各ロボットは、通常、移動するための4つのアクションを実行することができます。のは(XC、YC)として、ロボットの現在の座標を表してみましょう。次いで、移動システムは、4つの隣接点のいずれかに移動することを可能にします。

  1. 最初のアクションは、(XC-1、YC)と(XC、YC)から移動させることができます。
  2. 第二の作用は、それが(XC、YC + 1)〜(XC、YC)から移動させることができます。
  3. 第三の作用は、それが(XC + 1、YC)と(XC、YC)から移動させることができます。
  4. 第四のアクションは、それが(XC、YC-1)〜(XC、YC)から移動することを可能にします。

残念ながら、いくつかのロボットのいくつかの運動システムが誤動作しているようです。各ロボットのためにあなたはそれが実行できるアクションを知って、それが実行できません。

あなたはそのすべてのロボットが同じ地点に集まるコマンドを送りたいです。そのためには、それぞれのロボットがポイント(X、Y)に達することができるように整数XとYのペアを選択する必要があります。それは、このようなポイントを見つけることは可能ですか?

入力

クエリの数 - 最初の行は1つの整数Q(1≤q≤105)を含みます。

そして、q個のクエリが続きます。クエリ内のロボットの数 - 各クエリは、1行1個の整数N(1≤n≤105)を含有することから始まります。その後、n行は、これらの線のi番目の現在のクエリのi番目のロボットについて説明し、次のとおりです。これは、6つの整数XI、YIは、FI、1 FI、2 FI、3かつf、4(-105が含ま≤xi、yi≤105、0≤fi、j≤1)。最初の2つの数字は、i番目のロボットの初期位置を記述し、次の4つの番号がi番目のロボットはj番目を使用できる場合、i番目のロボット(FI、J = 1を移動させるために使用できるアクション説明しますアクション、およびFiのJ = 0それはj番目のアクションを使用できない場合)。

すべてのクエリ上のロボットの総数が105を超えないことが保証されます。

出力

あなたはこれらのクエリは、入力に現れる順に、それぞれ独立したクエリに答える必要があります。

クエリに答えるためには、次のいずれかを実行する必要があります。

  • それは、すべてのnロボットによって到達可能である点を見つけることが不可能である場合、別個の行に1つのずつ番号0を印刷します。
  • X及びYは、すべてのnロボットによって到達点の座標であるX 1 Y:すべてのnロボット、プリント同じライン上に3つのスペースで区切られた整数で到達可能である点を見つけることが可能である場合。 両方の  X  及び  Yは、 超えてはならない  105を 絶対値で、すべてのロボットによって到達可能な少なくとも1つの点が存在する場合、そのような点の少なくとも一方が超えない座標た両方ことが保証される  105を 絶対値で

入力

4

2

-1 -2 0 0 0 0

-1 -2 0 0 0 0

3

1 5 1 1 1 1

2 5 0 1 0 1

3 5 1 0 0 0

2

1337 1337 0 1 1 1

1336 1337 1 1 0 1

1

3 5 1 1 1 1

出力

1 -1 -2

1 2 5

0

1 -100000 -100000

 

4つの垂直および水平マーク被写体ロボットの位置及びNロボットを挙げることができる:問題の意味を

国境でお聞きの絶対値が超えていない  10 ^ 5のマップを、ポイントを見つけることができ、ロボットがすべてのポイントに到達することができます。

アイデア:ロボットの実行可能な範囲を維持し、すべてが行くことができないこれらのロボットの向きに応じて行くことができ、

最后看区间是否成立,成立输出 1 和 区间上任意一点,不行输出 0 就行了。

另外,这里区间就是左下点和右上点组成的矩阵。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<map>
 6 #include<set>
 7 #include<vector>
 8 #include<queue>
 9 #include<algorithm>
10 using namespace std;
11 #define ll long long 
12 const int inf=1e9+7;
13 const int mod=1e9+7;
14  
15 const int maxn=1e5+5;
16 pair<int,int> num[maxn];
17  
18 int main()
19 {
20     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
21     
22     int T;
23     cin>>T;
24     int n;
25     
26     while(T--)
27     {
28         cin>>n;
29         
30         pair<int,int> left={-100000,-100000};//左下点 
31         pair<int,int> right={100000,100000};//右上点 
32         int a,b,c,d;//左上右下不能走 
33         for(int i=0;i<n;i++)
34         {
35             cin>>num[i].first>>num[i].second>>a>>b>>c>>d;
36             
37             if(a==0)
38                 left.first=max(left.first,num[i].first);
39             if(b==0)
40                 right.second=min(right.second,num[i].second);
41             if(c==0)
42                 right.first=min(right.first,num[i].first);
43             if(d==0)
44                 left.second=max(left.second,num[i].second);
45         }
46         
47         if(left.first>right.first||left.second>right.second)//不成立 
48         {
49             cout<<0<<endl;
50             continue;
51         }
52         
53         cout<<1<<" "<<left.first<<" "<<left.second<<endl;
54     }
55     
56     return 0;
57 }

 

おすすめ

転載: www.cnblogs.com/xwl3109377858/p/11271862.html