标签(空格分隔): 题解(codeforces)
ps:关于本题,昨晚熬夜到1:05打cf想涨分结果脑袋抽了,
一直B题wa9.mmp.没有想到0可以变成-1.没有想到修改绝对值最大的那个负数
rating掉到1340.mmp
首先正的变成负的。在绝对值上会增加1.所以先把正的变成负的
是奇数的情况下.全部是负的.将谁修改成正的.修改成正的绝对值要减1.
看下面的情况:
修改-2
修改-3
表面上看是修改最小的那个,也就是绝对值最大的那个为正的
假设数字按照绝对值递增排列,按照大小从大到小排序.
证明修改an要优于修改
记除去和的数字之间相乘的结果是
修改.
修改.
容易知道
并且
所以所以修改最优
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
using namespace std;
#define dbg(x) cerr << #x"=" << x << endl;
typedef long long LL;
const int MAX_N = 1e5+100;
int a[MAX_N];
int main(){
// freopen("in.txt","r",stdin);
ios::sync_with_stdio(0); cin.tie(0);
int n;
cin >> n;
for(int i = 1; i <= n; ++i){
cin >> a[i];
if(a[i] >= 0) a[i] = -a[i]-1;
}
if(n&1){
int mn = -1;
int id = 0;
for(int i = 1; i <= n; ++i){
if(mn >= a[i]){
mn = a[i];
id = i;
}
}
a[id] = -a[id]-1;
}
for(int i = 1; i <= n; ++i){
cout << a[i] << " ";
}
cout << endl;
return 0;
}