CodeForce
CodeForce #849 (Div. 4) E. Negatives and Positives
ChoiSW
2023. 2. 5. 15:30
수열에서 인접한 수 2개의 부호를 동시에 바꿔주는 동작들을 수행하여 만들어질 수 있는 최대합 값을 구하는 문제이다.
인접한 두 수의 부호가 다를 때 동시에 바꿔주는 동작은 음의 부호( - )가 옆으로 이동하는 것으로 볼 수 있으며
만약 인접한 두 수가 음수,음수이면 양수,양수로 무조건 바뀌어야한다.
위의 과정을 반복하면 전체 수열에서 음의 개수가 짝수이면 모든 수가 다 양수로 바뀌고,
음의 개수가 홀수면 가장 작은 수만 음수이고 나머지 수들은 다 양수가 된다.
import sys
input=sys.stdin.readline
t=int(input())
for _ in range(t):
n=int(input())
num=list(map(int, input().split()))
negCnt=0
for i in range(n):
if num[i] < 0:
negCnt+=1
sum=0
if negCnt%2 == 0:
for i in range(n):
if num[i]<0:
sum+=(-num[i])
else:
sum+=num[i]
print(sum)
else:
minAbs=10**9
for i in range(n):
if num[i]<0:
sum+=(-num[i])
if minAbs > -num[i]:
minAbs = -num[i]
else:
sum+=num[i]
if minAbs > num[i]:
minAbs = num[i]
print(sum-minAbs*2)