题目
http://codeforces.com/contest/1375/problem/A
思路
题目中表达式
a
i
+
1
−
a
i
>
=
0
a_{i+1} - a_i >= 0
ai+1−ai>=0可转换为
a
i
+
1
>
=
a
i
a_{i + 1} >= a_i
ai+1>=ai。
同理
a
i
+
1
−
a
i
<
=
0
a_{i+1} - a_i <= 0
ai+1−ai<=0可转换为
a
i
+
1
<
=
a
i
a_{i + 1} <= a_i
ai+1<=ai。
既然可以翻转任意个整数的符号,那么一开始的符号就没有意义。所以假如我们对所有整数取绝对值,可以得到n个非负数。
比如例子中的 2, -4, 7, -6, 4,我们可以转换为2, 4, 7, 6, 4。
我们知道,负数一定比非负数小。所以如果我们把所有偶数下标的数翻转为负数,则每个偶数下标的数比它前面的数小,每个奇数下标的数比它前面的数大,得到答案。
比如2, 4, 7, 6, 4翻转后得到2, -4, 7, -6, 4。
代码
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int tcase;
cin >> tcase;
while(tcase--) {
int n;
cin >> n;
for(int i = 0; i < n; i++) {
int a;
cin >> a;
if (i % 2 == 0) {
cout << abs(a) << " ";
} else {
cout << -abs(a) << " ";
}
}
cout << endl;
}
return 0;
}