[BZOJ 5071]小A的数字
Output
Sample Input
2
6
1 6 9 4 2 0
7 -6 19 2 -6 6
4
1 2 3 4
4 2 1 3
Sample Output
YES
NO
HINT
第一组数据中,可以依次取 i=2,4,5,每次得到的新数列如下:
第一次, i=2,得到 7,-6,15,4,2,0,
第二次, i=4,得到 7,-6,19,-4,6,0,
第三次, i=5,得到 7,-6,19,2,-6,6,所以可以得到 b 数列。
第二组数据中,不可能做到这一点。
将(Ai-1,Ai,Ai+1)变为(Ai-1 + Ai,-Ai,Ai+1 + Ai)
做前缀和转化为
(Ai-1,Ai-1+Ai,Ai-1+Ai+Ai+1)变为(Ai-1+Ai,Ai-1,Ai-1+Ai+Ai+1)
发现一次操作相当于交换前缀和的两位
所以将前缀和排序,判断相同就行了
zyys
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int n; 7 long long a[100001],b[100001]; 8 int main() 9 {int T,i,flag; 10 cin>>T; 11 while (T--) 12 { 13 scanf("%d",&n); 14 for (i=1;i<=n;i++) 15 scanf("%lld",&a[i]),a[i]+=a[i-1]; 16 for (i=1;i<=n;i++) 17 scanf("%lld",&b[i]),b[i]+=b[i-1]; 18 sort(a+1,a+n+1); 19 sort(b+1,b+n+1); 20 flag=0; 21 for (i=1;i<=n;i++) 22 if (a[i]!=b[i]) 23 {flag=1;break;} 24 if (flag==0) printf("YES\n"); 25 else printf("NO\n"); 26 } 27 }