码迷,mamicode.com
首页 > 其他好文 > 详细

CF B.Kind Anton(4月8号)

时间:2020-04-12 00:06:25      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:c++   using   cout   flag   位置   name   main   return   技术   

------------恢复内容开始------------

技术图片

 

 技术图片

 

 翻译如下

技术图片

 

 技术图片

 (我看了半天没明白)然后大佬一眼就看出来了(手动膜拜大佬);

就思路当上面一个数组的某一位和下面一个数组的那一位有不同的时候,上减下如果差小于0就看前面有没有1;

大于0看前面有没有-1;

做法:

用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 }

 

CF B.Kind Anton(4月8号)

标签:c++   using   cout   flag   位置   name   main   return   技术   

原文地址:https://www.cnblogs.com/ahijing/p/12682890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!