链接: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
");
}
}