题解:B4468 符号选择 / opt

· · 题解

解法

显然要将较大的数使用正号,较小的数使用负号。用一个排序即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
int n,k,ans=0,a[N];
bool cmp(int x,int y){
    return x>y;
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=k;i++) ans+=a[i];
    for(int i=k+1;i<=n;i++) ans-=a[i];
    cout<<ans; 
    return 0;
}

后记

这时候就有人要问了,如果给出的 x 有可能是负数怎么办呢?

那就先把所有数的绝对值排个序把有较大绝对值的数选上就行了。