题意,给你两个序列,
然后你有一种操作方法,不论操作多少次,只要能将上面的数列变成下面的数列就YES 否则no。
对an操作,
则
(a
i-1
, a
i
, a
i+1
)->(a
i-1
+ a
i
, -a
i
, a
i+1
+ a
i
)
然后发现,其前缀和为,(si-1, si, si+1)->(si, si-1, si+1)
返现前缀和还是原来那几个数,不论怎么变,前缀和都是固定的,
所以只要前缀和都能一一对应就成立。
#include<bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
int a[maxn],b[maxn];
int main(){
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
int f=1;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(i) a[i]+=a[i-1];
}
for(int i=0;i<n;i++){
scanf("%d",&b[i]);
if(i) b[i]+=b[i-1];
}
sort(a,a+n);
sort(b,b+n);
for(int i=0;i<n;i++)
if(a[i]!=b[i]){
f=0;break;
}
if(f)printf("Yes\n");
else printf("No\n");
}
return 0;
}