zoukankan      html  css  js  c++  java
  • BZOJ5071 小A的数字 BZOJ2017年10月月赛 其他

    欢迎访问~原文出处——博客园-zhouzhendong

    去博客园看该题解


    题目传送门 - BZOJ5071


    题意概括

      


    题解

      一开始蒙了。

      感觉做过类似的题目。

      但是找不到方法。

      突然想到前缀和!

      对于三元组变换:

      (ai-1,ai,ai+1) => (ai-1+ai,-ai,ai+1+ai)

      我们考虑其前缀和变化:

      设x为sumi-2

      在变换前:

      sumi-1=x+ai-1

      sumi=x+ai-1+ai

      sumi+1=x+ai-1+ai+ai+1

      变换后

      sumi-1=x+ai-1+ai

      sumi=x+ai-1

      sumi+1=x+ai-1+ai+ai+1

      于是我们发现一次操作实际上就是把sumi-1sumi交换了一下。

      那么我们要判断YES或者NO,只需要把a和b数组分别计算前缀和然后再排序比较是否完全相同即可。


    代码

    #include <cstring>
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    #include <cstdlib>
    using namespace std;
    const int N=100005;
    int T,n,a[N],b[N];
    int main(){
    	scanf("%d",&T);
    	while (T--){
    		scanf("%d",&n);
    		a[0]=b[0]=0;
    		for (int i=1,x;i<=n;i++){
    			scanf("%d",&x);
    			a[i]=a[i-1]+x;
    		}
    		for (int i=1,x;i<=n;i++){
    			scanf("%d",&x);
    			b[i]=b[i-1]+x;
    		}
    		sort(a+1,a+n+1);
    		sort(b+1,b+n+1);
    		bool flag=1;
    		for (int i=1;i<=n&&flag;i++)
    			if (a[i]!=b[i])
    				flag=0;
    		puts(flag?"YES":"NO");
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    学生信息录入系统
    作业11(增删改查listview)
    作业10(qq增删改查)
    作业9
    作业8
    作业7
    右键打开Windows Terminal
    axure 动态面板中滚动条
    TortoiseSVN服务端的配置与使用
    hfs使用小技巧
  • 原文地址:https://www.cnblogs.com/zhouzhendong/p/BZOJ5071.html
Copyright © 2011-2022 走看看