数列转换

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描写叙述

有一个数列a1,a2,a3...an,每次能够从中随意选三个相邻的数ai-1 ,a,
ai+1 ,进行例如以下操作(此操作称为“对ai进行操作”)

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

给定初始和目标序列。能否通过以上操作。将初始序列转换成为目标序列?比如。初始序列(1 6 9 4 2 0)目标序列(7 -6 19 2 -6 6)可经过例如以下操作:

(1 6 9 4 2 0)->( 1 6 13 -4 6 0)->(1 6 13 2 -6 6)->(7 -6 19 2 -6 6)

请你推断给定的初始状态和目标状态,输出Yes(可以转换)或No(不能转换)

输入
第一行是一个正整数N,表示測试数据的组数。(N<=100)

每组測试数据的第一行是一个整数M(3<=M<=1000),表示该组測试数据的起始状态与结束状态都有M个数。

每组測试数据的第二行是M个整数Ai(-1000<=Ai<=1000)。表示起始状态。

每组測试数据的第三行是M个整数Bi(-1000<=Bi<=1000),表示终止状态。

输出
假设可以转换。输出Yes

假设不能转换。输出No
例子输入
2
3
1 2 3
1 3 2
6
1 6 9 4 2 0
7 -6 19 2 -6 6
例子输出
No
Yes
来源
《世界大学生程序设计竞赛高级教程·第一冊》
上传者
张云聪

题解:假设用暴力模拟出全部结果然后再比較的话非常easy超时,并且编程复杂度高。可是在网上看到了一个非常奇妙的守恒法,不是在细节上关注这些变化。而是从总体上看到某些不变的东西,用S[i]表示A[0...i]的和,当对A[i]进行变化的时候。直接结果是S[i]和S[i-1]交换了位置。所以为题就转换成了求S数组,排序。然后比較两个S数组是否相等。

#include <stdio.h>
#include <string.h>
#include <algorithm> #define maxn 1010 int A[maxn], B[maxn]; int main() {
int t, n, i;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
for(i = 0; i < n; ++i) {
scanf("%d", &A[i]);
if(i) A[i] += A[i-1];
}
for(i = 0; i < n; ++i) {
scanf("%d", &B[i]);
if(i) B[i] += B[i-1];
}
std::sort(A, A + n);
std::sort(B, B + n);
if(std::equal(A, A + n, B))
printf("Yes\n");
else printf("No\n");
}
return 0;
}

NYOJ109 数列转换 【守恒法】的更多相关文章

  1. NYOJ-109 数列转换 AC 分类: NYOJ 2014-12-01 00:54 84人阅读 评论(0) 收藏

    守恒法的问题,表示,刚刚看了一点点 #include <iostream> #include <cstring> #include <cstdio> #includ ...

  2. 剑指Offer的学习笔记(C#篇)-- 斐波那契数列

    题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). 一 . 理解概念 斐波那契数列概念:斐波那契数列(Fibonacci sequence), ...

  3. ACM/IOI 历年国家集训队论文集和论文算法分类整理

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率--从IOI98试题PICTURE谈起> 来煜坤:<把握本质,灵活运用--动态规划的深入探讨> 齐鑫:<搜索方法 ...

  4. ACM/IOI 国家队集训队论文集锦

    转自:https://blog.csdn.net/txl199106/article/details/49227067 国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98 ...

  5. [转] ACM中国国家集训队论文集目录(1999-2009)

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98试题PICTURE谈起>来煜坤:<把握本质,灵活运用——动态规划的深入探讨>齐鑫:<搜索方法中的 ...

  6. NOI 国家集训队论文集

    鉴于大家都在找这些神牛的论文.我就转载了这篇论文合集 国家集训队论文分类 组合数学 计数与统计 2001 - 符文杰:<Pólya原理及其应用> 2003 - 许智磊:<浅谈补集转化 ...

  7. Round 0: Regionals 2010 :: NEERC Eastern Subregional

    Round 0: Regionals 2010 :: NEERC Eastern Subregional 贴吧题解(官方)? 网上的题解 水 A Murphy's Law 题意:Anka拿着一块涂着黄 ...

  8. Anti-pattern

    https://en.wikipedia.org/wiki/Anti-pattern https://zh.wikipedia.org/wiki/反面模式 An anti-pattern is a c ...

  9. Anti-pattern(反面模式)

    转自维基百科 http://zh.wikipedia.org/wiki/%E5%8F%8D%E9%9D%A2%E6%A8%A1%E5%BC%8F 在软件工程中,一个反面模式(anti-pattern或 ...

随机推荐

  1. Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  2. poj3216

    这是一道描述非常不清楚的题目 首先解释一下,题目中的ti是任务开始时间不是结束时间, 然后维修人员可以理解为可以再任意时间从公司出发: 好,首先不难想到用floyd预处理一下: 然后我们把每个任务看成 ...

  3. poj3252

    好了,我的数论渣爆了………… 首先[n,m]内的round number显然就是f[m]-f[n-1] 即问0~x内有多少round number: 设x的二进制位数为t: 首先很好分析出在这个范围 ...

  4. bzoj1789 AHOI 维护数列(线段树)

    首先想到线段树,然后刚开始写忽然想到树状数组求和岂不是更快,而且编程复杂度又小,于是把之前写的删掉,写树状数组,写完模版之后忽然发现这题竟然是区间修改! 于是又删掉重写,忽然发现不会处理又加又乘的,果 ...

  5. c#字符串及数组操作

    字符串操作(取当前时间)string time=convert.tostring(DateTime.Today).split( new char []{' '});    textbox1.text= ...

  6. XUtils框架的学习(一)

    一  xutils框架引入到AndroidStudio工程,最简单的方法:① 在APP的build.gradle里面加入 compile 'org.xutils:xutils:3.3.36'.② 一定 ...

  7. Progress 自定义(一)-shape

    需求:自定义ProgressBar,使用系统自定义shape; 效果图: 1.默认底色: 2.第一进度颜色: 3.第二进度颜色: 实现分析: 1.目录结构: 代码实现: 1.progress_styl ...

  8. Linux中的设备文件与设备号

    设备文件与设备号   在Linux下,一切皆文件,设备也不例外,为了管理这些设备,系统为它们各自都编了号,而每个设备号又分为主设备号和次设备号.主设备号用来区分不同类型的设备,而次设备号用来区分同一类 ...

  9. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.3.1

    Let $A=A_1\oplus A_2$. Show that (1). $W(A)$ is the convex hull of $W(A_1)$ and $W(A_2)$; i.e., the ...

  10. codeforces 629D 树状数组+LIS

    题意:n个圆柱形蛋糕,给你半径 r 和高度 h,一个蛋糕只能放在一个体积比它小而且序号小于它的蛋糕上面,问你这样形成的上升序列中,体积和最大是多少 分析:根据他们的体积进行离散化,然后建树状数组,按照 ...