洛谷 11 月月赛 I Div.2 A [Kubic] Addition 题解

Content

你有一个长度为 \(n\) 的序列 \(a\)。你可以执行 \(n-1\) 次操作,每次操作中你可以选择一个位置 \(i\),并删除 \(a_i\)\(a_{i+1}\),再在原位置上面插入 \(a_i+a_{i+1}\) 或者 \(a_i-a_{i+1}\)。求出恰好剩下的一个数的最大值。

数据范围:\(1\leqslant n\leqslant 10^5\)\(|a_i|\leqslant 10^9\)

Solution

很标准的一道良心送分 A 题。

不难想到,由于要插入的值是左边的那个数的值加上或减去右边那个数的值,所以,我们将 \(a_2,\dots,a_n\) 这些数全部往 \(a_1\) 里面累积进去,具体地,如果 \(a_i(i\geqslant 2)\) 是负数,就往 \(a_1\) 加进去其相反数,否则就直接加进 \(a_1\)

上面这句话归结成一个式子就是 \(a_1+\sum\limits_{i=2}^n |a_i|\)

Code

namespace Solution {
	int n, x;
	ll ans;
	
	iv Main() {
		read(n);
		F(int, i, 1, n) read(x), ans += (i == 1 ? x : abs(x));
		write(ans);
		return;
	}
}
posted @ 2021-12-15 21:08  Eason_AC  阅读(40)  评论(0)    收藏  举报