P52015 仙术・超大玉螺旋丸 题解

farfar 2022-04-19 20:27:42 2022-04-23 14:54:16 15 返回题目

题外话 第一次写题解,有点小激动

题意

给你 n 个数,让你做若干次操作:将任意相邻两数取相反数。求最后和的最大值。

相反数

简单来说,就是正数变负数,负数变正数,比如 6取相反数=-6,-10取相反数=10

思路

先看这个例子(n=6):

1 -1 -1 1 1 1

显然答案为6。

再看这个:

1 -1 1 1 1 -1

答案还是6,但是为什么呢?

操作如下:

· 1 1 -1 1 1 -1 (操作(2,3))

· 1 1 1 -1 1 -1 (操作(3,4))

· 1 1 1 1 -1 -1 (操作(4,5))

· 1 1 1 1 1 1 (操作(5,6))

我们可以发现,负号通过向右转移,转移到另一个负号前,然后一起消灭。

于是我们可以理解为:对于每次操作,将任意两数取相反数。

所以:当负数个数为偶数时,我们可以全部消灭。

那么为奇数呢?

我们可以把最大的那几个负数消灭,剩下一个放着让他拖后腿。

这样对吗?

看这一组(n=6):

-10 -10 -10 -10 -10 1

按照上面一个思路,答案是 4*10+1-10=31。

而正确解法是把(1,2),(3,4),(5,6)操作,答案是 10*5-1=49。

这个hack提醒我们,可以把正数拉过来当替死鬼。

总结

如果负数个数为偶,直接把所有负数变正数。

如果为奇,先把所有负数变正数,再找出绝对值最小的,把它变负数,实现了答 案最大化。

你们学废了吗?感谢观看

{{ vote && vote.total.up }}