• [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$ 是否相等。

     1 //It is made by Awson on 2017.10.28
     2 #include <set>
     3 #include <map>
     4 #include <cmath>
     5 #include <ctime>
     6 #include <cmath>
     7 #include <stack>
     8 #include <queue>
     9 #include <vector>
    10 #include <string>
    11 #include <cstdio>
    12 #include <cstdlib>
    13 #include <cstring>
    14 #include <iostream>
    15 #include <algorithm>
    16 #define LL long long
    17 #define link LINK
    18 #define Min(a, b) ((a) < (b) ? (a) : (b))
    19 #define Max(a, b) ((a) > (b) ? (a) : (b))
    20 #define Abs(a) ((a) < 0 ? (-(a)) : (a))
    21 using namespace std;
    22 const int N = 1e5;
    23 
    24 int t, n;
    25 int a[N+5], b[N+5];
    26 
    27 void work() {
    28   scanf("%d", &n);
    29   for (int i = 1; i <= n; i++) scanf("%d", &a[i]), a[i] += a[i-1];
    30   for (int i = 1; i <= n; i++) scanf("%d", &b[i]), b[i] += b[i-1];
    31   sort(a+1, a+n+1); sort(b+1, b+n+1);
    32   for (int i = 1; i <= n; i++)
    33     if (a[i] != b[i]) {
    34       printf("NO
    "); return;
    35     }
    36   printf("YES
    ");
    37 }
    38 int main() {
    39   int t; cin >> t;
    40   while (t--) work();
    41   return 0;
    42 }
  • 相关阅读:
    gitlab的数据库磁盘坏了已经没有办法恢复情况下如何恢复git上的代码
    psql: FATAL: the database system is in recovery mode
    k8s 下 jenkins 分布式部署:利用pipeline动态增加slave节点
    pipeline 流水线:持续部署(docker)-企业微信群通知消息
    查看私有仓库镜像的版本列表
    MyBatis与Hibernate比较
    MyBatis与JDBC的对比
    Java_Ant详解(转载)
    IntelliJ Idea 常用快捷键列表
    隔行换色
  • 原文地址:https://www.cnblogs.com/NaVi-Awson/p/7745904.html
Copyright © 2020-2023  润新知