标签:c++ using cout flag 位置 name main return 技术
------------恢复内容开始------------
做法:
用map存第一次出现-1的位置和第一次出现1的位置,然后遍历一遍,看是否可行;大佬的做法↓↓↓↓↓
1 #include<bits/stdc++.h>
2 const int maxn=1e5+50;
3 const int INF=0x3f3f3f3f;
4 using namespace 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 map<int,int> m;
13 m[1]=INF,m[-1]=INF;
14 cin>>n;
15 for(int i=1;i<=n;i++)
16 cin>>a[i];
17 for(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第一次出现的位置
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 flag=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 }
标签:c++ using cout flag 位置 name main return 技术
原文地址:https://www.cnblogs.com/ahijing/p/12682890.html