Codeforces 1110E

Posted sjkmost

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于Codeforces 1110E的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1110E (差分)

CF1110E Magic Stones

CF1110E Magic Stones - 差分

[Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)][C. Playing Piano](代码片段

cf1110E 思维

CF1110E Magic Stones