首页 > 其他 > 详细

5.28 VJ E - Kind Anton

时间:2020-05-28 22:20:00      阅读:58      评论:0      收藏:0      [点我收藏+]

#include<bits/stdc++.h>
#define ll long long
using namespace std;
/*
题意:给出一个数组a和数组b,a中只存在1,0,-1三种数字,b中是任意的数,能否使a通过(条件:a中任意下标的数只能加上它前面的数)操作变成b
只需要关注1和-1,+1能增大,-1能减小,只要看想要改变的数前面有没有1或-1就行
*/
int  main( )
{
    ll t,n;
    cin>>t;
    while(t--)
    {
        cin>>n;
        ll a[n],b[n],zz=0,ff=0,p1=0,p2=0,x=0;
        for(int i=0; i<n; i++)
        {
            cin>>a[i];
            if(a[i]==1&&p1==0)//找到最靠前的那个1的下标 #注意a中不存在1的情况,在后面利用p1的值来判断#
            {
                zz=i;
                p1=1;
            }
            if(a[i]==-1&&p2==0)//找到最靠前的那个-1的下标
            {
                ff=i;
                p2=1;
            }
        }
        for(int i=0; i<n; i++)
        {
            cin>>b[i];
        }
        for(int i=n-1; i>=0; i--)
        {
            if(b[i]<a[i])//判断前面有没有-1能使a[i]减小
            {
                if(i>ff&&p2==1)//当a中不存在-1,即ff=0时,ff一定小于i(刚开始忽视了这一点wa了
                    continue;
                else
                {
                    cout<<"NO"<<endl;
                x=1;
                    break;
                }
            }
            else if(b[i]>a[i])//判断前面有没有1能使a[i]增大
            {
                if(i>zz&&p1==1)//当a中不存在1,即zz=0时,zz一定小于i
                    continue;
                else
                {
                    cout<<"NO"<<endl;
                    x=1;
                    break;
                }
            }
        }
        if(x==0)cout<<"YES"<<endl;
    }
    return 0;
}

5.28 VJ E - Kind Anton

原文:https://www.cnblogs.com/SyrupWRLD999/p/12983686.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!