------------リカバリコンテンツが開始しました------------
次のように翻訳します
(長い間見てもわからなかった)それから、兄はそれを一目で見た(手動で兄を崇拝した)。
上の配列のビットと下の配列のビットに違いがある場合を考えて、その差が0より小さい場合は、前に1があるかどうかを確認します。
前に-1があるかどうかを確認するには、0より大きい。
練習:
マップを使用して、-1の最初の発生の位置と1の最初の発生の位置を格納し、次にもう一度トラバースして、実行可能かどうかを確認します。兄の方法↓↓↓↓↓
1 #include <bits / stdc ++。h>
2 const int maxn = 1e5 + 50 ;
3 const int INF = 0x3f3f3f3f ;
4 名前空間std を使用し ます。
5 int a [maxn]、b [maxn];
6 int main(){
7 int t;
8 cin >> t;
9 while(t-- ){
10 int n;
11 int flag = 0、flag1 = 0、flag2 = 0 ;
12 マップ<int、int > m;
13 m [ 1 ] = INF、m [ -1 ] = INF;
14 cin >> n;
15 のために(INT iは= 1 ; iが<= N; I ++ )
16 CIN >> [I]。
17 のために(INT iは= 1 ; <I = N; I ++ )
18 CIN >> B [i]は、
19 for(int i = 1 ; i <= n; i ++ ){
20 if(a [i] == 1 &&!flag1){//レコード1の最初の出現位置
21 flag1 = 1 ;
22 m [ 1 ] = i;
23 }
24 if(a [i] ==- 1 &&!flag2){//レコード-1 1つの出現位置
25 flag2 = 1 ;
26 m [ -1 ] = i;
27 }
28 }
29 for(int i = 1 ; i <= n; i ++ ){
30 if(a [i]> b [i ]){
31 if(m [ -1 ]> = i){//以前の32 フラグがあったかどうか、上部と下部の要素が異なる場合に比較し
ます = 1 ;
33 break ;
34 }
35 }
36 else if(a [i] < b [i]){
37 if(m [ 1 ]> = i){
38 flag = 1 ;
39 break ;
40 }
41 }
42 }
43 if (flag)
44 cout << "NO " << ' \ n ' ;
45 else
46 cout << " YES " << ' \ n ' ;
47 }
48 return 0 ;
49 }