AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。
出典:
AtCoder Beginners Contest 125 D – Flipping Signs
最終的にどういう形を取ることが可能なのか、きちんと考察さえできれば実装は難しくない問題。まあ、それを思いつくのが難しいこともあるわけだけど、この問題については、いくつか手元で試してみれば、すぐ思いつけるのではないだろうか。
def main():
N = int(input())
A = list(map(int, input().split()))
abs_total = 0
abs_min = 10**18
negative_cnt = 0
for n in A:
if n < 0:
abs_total -= n
negative_cnt += 1
else:
abs_total += n
if abs(n) < abs_min:
abs_min = abs(n)
if negative_cnt % 2 == 0:
print(abs_total)
else:
print(abs_total - 2 * abs_min)
main()
関連