[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 }

 

posted @ 2017-11-05 14:05  Z-Y-Y-S  阅读(347)  评论(0编辑  收藏  举报