[BZOJ 5071]小A的数字
Description
小A成为了一个数学家,他有一串数字A1,A2...An
每次可以进行如下操作,选择一个数字i(1<i<=n),将(Ai-1,Ai,Ai+1)
变为(Ai-1 + Ai,-Ai,Ai+1 + Ai),特别地,若i=N,则(An-1,An)变为
(An-1 + An,-An).小A很好奇,能否通过若干次操作,得到他的幸运数列B1,B2...Bn.可是他太小,不会算,请你帮帮他
Input

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 数列。
第二组数据中,不可能做到这一点。

题解
做的时候以为只能从左往右操作...
我么考虑操作$(A_{i-1},A_i,A_{i+1})$为$(A_{i-1} + A_i,-A_i,A_{i+1} + A_i)$。
做一次前缀,即为$(A_{i-1},A_i+A_{i-1},A_{i+1}+A_i+A_{i-1})$操作成$(A_{i-1} + A_i,A_{i-1},A_{i+1} + A_i + A_{i-1})$
实际上我们发现就是交换了前面两个元素的位置。
等于说我的每次操作就是交换前缀和数组的元素相邻的元素的位置。
所以$sort$一遍判断 $A$ 和 $B$ 是否相等。
//It is made by Awson on 2017.10.28
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define link LINK
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
using namespace std;
const int N = 1e5; int t, n;
int a[N+], b[N+]; void work() {
scanf("%d", &n);
for (int i = ; i <= n; i++) scanf("%d", &a[i]), a[i] += a[i-];
for (int i = ; i <= n; i++) scanf("%d", &b[i]), b[i] += b[i-];
sort(a+, a+n+); sort(b+, b+n+);
for (int i = ; i <= n; i++)
if (a[i] != b[i]) {
printf("NO\n"); return;
}
printf("YES\n");
}
int main() {
int t; cin >> t;
while (t--) work();
return ;
}
[BZOJ 5071]小A的数字的更多相关文章
- [BZOJ 5074]小B的数字
Description 题库链接 给你一个长度为 \(n\) 的序列 \(a_1,a_2,\cdots,a_n\) ,让你生成另一个序列 \(b_1,b_2,\cdots,b_n\) ,使得 \(\f ...
- bzoj 3437 小p的农场
bzoj 3437 小p的农场 思路 \(f[i]=min(f[j]+\sum\limits_{k=j+1}^{i}{b[k]*(i-k)}+a[i])\) \(f[i]=min(f[j]+\sum\ ...
- 【BZOJ5074】[Lydsy十月月赛]小B的数字 数学
[BZOJ5074][Lydsy十月月赛]小B的数字 题解:题目是问你ai*bi>=sum,bi>=0这个不等式组有没有解.因为a<=10,容易想到取ai的lcm,然后变成lcm*b ...
- 【BZOJ5071】[Lydsy十月月赛]小A的数字 发现性质
[BZOJ5071][Lydsy十月月赛]小A的数字 题解:一般遇到这种奇奇怪怪的操作,常用的套路是将原序列差分一下,或者求个前缀和什么的.本题就是直接对原序列求前缀和,然后发现一次操作相当于交换两个 ...
- bzoj 4447 小凸解密码
bzoj 4447 小凸解密码 先将原始状态的 \(B\) 处理出来,可以发现,若不修改,则每次指定的起始位置不同,对这个环 \(B\) 带来的影响只有 \(B_0\) 不同,即每次 \(B_0=A_ ...
- 【ZJ选讲·BZOJ 5071】
小A的数字 有一串数字A1 ,A2,--,An,每次可以进行如下骚操作: 选择一个数字i,将(Ai-1,Ai,Ai+1)变为(Ai-1+Ai,-Ai,Ai+1+Ai), (特别地,若i=N,则( ...
- bzoj 4031: 小Z的房间 矩阵树定理
bzoj 4031: 小Z的房间 矩阵树定理 题目: 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时 ...
- BZOJ 5028 小z的加油站
bzoj链接 Time limit 10000 ms Memory limit 262144 kB OS Linux 感想 树上动态gcd的第二题也好了. [x] BZOJ 2257 [JSOI200 ...
- BZOJ 3438 小M的礼物
BZOJ 3438 小M的礼物 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1. ...
随机推荐
- Leetcode 27——Remove Element
Given an array and a value, remove all instances of that value in-place and return the new length. D ...
- 听翁恺老师mooc笔记(3)--指针的定义
在上一个blog学习了&运算符,使用&取了变量.数组等地址,有什么用那?如果能够将取得的变量的地址传递给函数,能否通过这个地址在函数内访问到外部这个变量?答案是肯定的,scanf(&q ...
- 一些琐碎的C/C++知识点
1. C++ 数组作为函数参数 在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针.(在32位系统中,对任意指针求sizeof结果为4) 2. C++ 中const的用法总结 ...
- 【审核】检查iOS项目中是否使用了IDFA
(1)什么是IDFA 关于IDFA,在提交应用到App Store时,iTunes Connect有如下说明: 这里说到检查项目中是否包含IDFA,那如何来对iOS项目(包括第三方SDK)检查是否包含 ...
- Python 远程部署 Fabric
参考文章:http://zmrenwu.com/post/21/ Fabric是一个Python的库,它提供了丰富的同SSH交互的接口,可以用来在本地或远程机器上自动化.流水化地执行Shell命令.因 ...
- LR回放https协议脚本失败: 错误 -27778: 在尝试与主机“www.baidu.com”connect 时发生 SSL 协议错误
今天用LR录制脚本协议为https协议,回放脚本时出现报错: Action.c(14): 错误 -27778: 在尝试与主机"www.baidu.com"connect 时发生 S ...
- 调用WCF时,调用已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定。
解决方案: 其实只要在客户端配置文件中加上如下紫色粗体属性( maxReceivedMessageSize): <?xml version="1.0" encoding=&q ...
- WebApi 的三种寄宿方式 (一)
最近逛博客园,看到了Owin,学习了一下,做个笔记,说不定将来哪天就用上了 关于 Owin 的介绍,百度解释的很清楚了: https://baike.baidu.com/item/owin/28607 ...
- cmd编译运行java
新建.java结尾的文件 内容 public class hello{ public static void main(String[] args){ System.out.println(" ...
- IPv6原理、应用与实践
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯微信技术架构部团队 2017年11月26日,中共中央办公厅和国务院办公厅印发了<推荐互联网协议第六版(IPv6)规模部署行动 ...