CF1180B Nick and Array

题目描述

Nick 在他 5 岁生日时收到了妈妈送给他的一组整数数组 $a=[a_1, a_2, \dots, a_n]$。他本想探索这个数组的各种性质,但拆开后却很失望,因为数组元素的乘积 $a_1 \cdot a_2 \cdot \dots a_n$ 对他来说似乎不够大。 他本打算把数组扔掉,但妈妈安慰了他。她告诉他,数组可以进行如下操作且不会被破坏:选择任意一个下标 $i$($1 \le i \le n$),执行 $a_i := -a_i - 1$。 例如,他可以将数组 $[3, -1, -4, 1]$ 通过对下标 $i=1$ 和 $i=3$ 的元素执行该操作,变为 $[-4, -1, 3, 1]$。 Kolya 立刻意识到,有时可以通过这种操作大幅增加数组元素的乘积。现在他决定只用这种操作(每个元素可以操作零次、一或多次,次数不限,也可以对同一元素多次操作),使数组的元素乘积 $a_1 \cdot a_2 \cdot \dots a_n$ 尽可能大。 请帮助 Kolya,输出经过操作后能获得的元素乘积最大的数组。 如果有多种答案,输出任意一种即可。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 10^{5}$),表示数组中的整数个数。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($-10^{6} \leq a_i \leq 10^{6}$),表示数组的元素。

输出格式

输出 $n$ 个数,表示经过操作后能获得元素乘积最大的数组。 如果有多种答案,输出任意一种即可。

说明/提示

由 ChatGPT 4.1 翻译