zoukankan      html  css  js  c++  java
  • Codeforces 1110E

    给定一个长为$n$的序列$a$,定义一次操作为将$a_i(1<i<n)$变为$a_{i-1}+a_{i+1}-a_i$。再给一个长为$n$的序列$b$,问$a$能否通过一系列操作变为$b$。

    $$nle10^5,a_i,b_ile2 imes10^9$$

    考虑差分,则每次操作相当于交换了差分数组的两个相邻位置,因此只需要判一下差分数组是否一致以及$a_1$是否等于$b_1$即可。

     1 const int MAXN = 100000 + 5;
     2 
     3 int a[MAXN], b[MAXN];
     4 
     5 int main() {
     6   int n;
     7   scanf("%d", &n);
     8   For(i, 1, n) {
     9     scanf("%d", &a[i]);
    10   }
    11   For(i, 1, n) {
    12     scanf("%d", &b[i]);
    13   }
    14   if (a[1] != b[1] || a[n] != b[n]) {
    15     puts("No");
    16     exit(0);
    17   }
    18   FOR(i, 1, n) {
    19     a[i] = a[i + 1] - a[i];
    20     b[i] = b[i + 1] - b[i];
    21   }
    22   std::sort(a + 1, a + n);
    23   std::sort(b + 1, b + n);
    24   FOR(i, 1, n) {
    25     if (a[i] != b[i]) {
    26       puts("No");
    27       exit(0);
    28     }
    29   }
    30   puts("Yes");
    31   return 0;
    32 }
  • 相关阅读:
    MySQL 练习题
    MySQL 增删查改
    HTML显示与隐藏
    360布局
    div布局
    HTML练习2
    HTML练习

    if语句的用法及其案例
    输入输出,数据类型与运算符
  • 原文地址:https://www.cnblogs.com/sjkmost/p/10357728.html
Copyright © 2011-2022 走看看