题目链接:周赛46 第二题 卡牌
思路 :
本题相比于其他周赛第二题是简单得多的,就是开个数组存储卡牌正反面的数之差,然后排一下序就行了。
我采取的是反面减去正面,如果是负值则说明反面的值可以让总数值变小,反之则变大。
在录入正面数值的时候,将正面数值依次加入到res(答案)中,然后再加上上述存储差值数组中的负值即可(同时我们要保证正面的牌数量至少有k张)
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
#define sum first
#define i second
int a[N],b[N],c[N],res=0;
int main(){
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++) {
cin>>a[i];
res+=a[i];
}
for(int i=0;i<n;i++) {
cin>>b[i];
c[i]=b[i]-a[i];
}
sort(c,c+n);
for(int i=0;i<n-k&&c[i]<=0;i++) res+=c[i];
cout<<res<<endl;
}