E. Negatives and Positives

time limit per test

2 seconds

memory limit per test

256 megabytes

Given an array aa consisting of nn elements, find the maximum possible sum the array can have after performing the following operation any number of times:

  • Choose 22 adjacent elements and flip both of their signs. In other words choose an index ii such that 1≤i≤n−11≤i≤n−1 and assign ai=−aiai=−ai and ai+1=−ai+1ai+1=−ai+1.

Input

The input consists of multiple test cases. The first line contains an integer tt (1≤t≤10001≤t≤1000) --- the number of test cases. The descriptions of the test cases follow.

The first line of each test case contains an integer nn (2≤n≤2⋅1052≤n≤2⋅105) --- the length of the array.

The following line contains nn space-separated integers a1,a2,...,ana1,a2,...,an (−109≤ai≤109−109≤ai≤109).

It is guaranteed that the sum of nn over all test cases does not exceed 2⋅1052⋅105.

Output

For each test case, output the maximum possible sum the array can have after performing the described operation any number of times.

Example

Input

Copy

复制代码

5

3

-1 -1 -1

5

1 5 -5 0 2

3

1 2 3

6

-1 10 9 8 7 6

2

-1 -1

Output

Copy

复制代码
1
13
6
39
2

Note

For the first test case, by performing the operation on the first two elements, we can change the array from [−1,−1,−1][−1,−1,−1] to [1,1,−1][1,1,−1], and it can be proven this array obtains the maximum possible sum which is 1+1+(−1)=11+1+(−1)=1.

For the second test case, by performing the operation on −5−5 and 00, we change the array from [1,5,−5,0,2][1,5,−5,0,2] to [1,5,−(−5),−0,2]=[1,5,5,0,2][1,5,−(−5),−0,2]=[1,5,5,0,2], which has the maximum sum since all elements are non-negative. So, the answer is 1+5+5+0+2=131+5+5+0+2=13.

For the third test case, the array already contains only positive numbers, so performing operations is unnecessary. The answer is just the sum of the whole array, which is 1+2+3=61+2+3=6.

解题说明:此题是一道数学题,找规律能发现可以采用贪心算法,不管执行了多少次的操作,数组中负数个数的奇偶性总是保持不变。因此如果一开始数组中有偶数个负数,那么我们总是可以通过若干次的操作使得负数的个数变成0,因此答案就是所有数的绝对值之和。如果一开始数组中有奇数个负数,那么最终至少要有一个负数,所有可以让数组中绝对值最小的那个数为负数(,那么答案就是其他数的绝对值之和再减去这个最小数的绝对值。

cpp 复制代码
#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;

typedef long long LL;


int main()
{
	int t;
	int n;
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d", &n);
		int cnt = 0, minv = 2e9;
		LL s = 0;
		while (n--)
		{
			int x;
			scanf("%d", &x);
			if (x < 0)
			{
				cnt++;
				x *= -1;
			}
			s += x;
			minv = min(minv, x);
		}
		if (cnt & 1)
		{
			s -= 2 * minv;
		}
		printf("%lld\n", s);
	}
	return 0;
}
相关推荐
龙俊杰的读书笔记2 小时前
[leetcode] 面试经典 150 题——篇9:二叉树(番外:二叉树的遍历方式)
数据结构·算法·leetcode·面试
sml259(劳改版)4 小时前
数据结构--堆
数据结构·算法·
独家回忆3645 小时前
每日算法-250409
算法
青椒大仙KI116 小时前
25/4/6 算法笔记<仿真O2DES>基础知识学习
笔记·学习·算法
井云智能AI矩阵系统6 小时前
数字人情感表达突破:微表情自动生成的算法革新
算法
一只码代码的章鱼7 小时前
数据结构与算法-图论-复习2(差分约束,强连通分量,二分图,LCA,拓扑排序,欧拉路径和欧拉回路)
数据结构·算法·图论
梁辰兴8 小时前
数据结构实验3.3:求解迷宫路径问题
数据结构·算法·深度优先·数组
阿巴~阿巴~9 小时前
蓝桥杯速成刷题清单(上)
c语言·c++·算法·蓝桥杯
drylong9 小时前
困难 - 2999. 统计强大整数的数目
算法
小美爱刷题10 小时前
力扣DAY40-45 | 热100 | 二叉树:直径、层次遍历、有序数组->二叉搜索树、验证二叉搜索树、二叉搜索树中第K小的元素、右视图
数据结构·算法·leetcode