码迷,mamicode.com
首页 > 其他好文 > 详细

[BZOJ 5071]小A的数字

时间:2017-11-05 14:30:02      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:分享   bsp   tput   printf   .com   --   name   com   i+1   

技术分享

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 }

 

[BZOJ 5071]小A的数字

标签:分享   bsp   tput   printf   .com   --   name   com   i+1   

原文地址:http://www.cnblogs.com/Y-E-T-I/p/7787314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!