题解:B4468 符号选择 / opt
wenhaoran11 · · 题解
解法
显然要将较大的数使用正号,较小的数使用负号。用一个排序即可。
代码
#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;
}
后记
这时候就有人要问了,如果给出的
那就先把所有数的绝对值排个序把有较大绝对值的数选上就行了。