codeforces round #632 B Kind Anton (水题)

链接:https://codeforces.com/contest/1333

题意:给两个定长为n的a,b数组,只能给a数组(i,j)中的a[j]=a[j]+a[i];问若干次操作后,能否把a数组变成b数组,

考虑一下只有两种情况

1,a[i]>b[i],在a[i]的前边是否有-1;

2,a[i]<b[i],在a[i]的前边是否有1;

so...map存一下出现的次数,判断一下即可;

代码:

#include<bits/stdc++.h>
using namespace std;

const int N=2e5+10;
int a[N],b[N];
int main()
{
    int t;
    scanf("%d",&t);
    map<int,int> mp;
    while(t--)
    {
        mp.clear();
        int flag=1;
        int n;
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
            mp[a[i]]++;
        }
        for(int i=1; i<=n; i++)
            scanf("%d",&b[i]);
        for(int i=n; i>=1; i--)
        {
            mp[a[i]]--;
            if(a[i]>b[i])
            {
                if(!mp[-1])
                {
                    flag=0;
                    break;
                }
            }
            else if(a[i]<b[i])
            {
                if(!mp[1])
                {
                    flag=0;
                    break;
                }
            }
        }
        if(flag)
            printf("YES
");
        else
            printf("NO
");
    }
}
原文地址:https://www.cnblogs.com/sweetlittlebaby/p/12668158.html