(buy.cpp/c)
小可买菜
问题描述
小可对达达真的是真爱!
小可为了体现对达达的爱,特意要为即将下班的达达做一顿丰富的晚饭!做饭之前需要先购买足够的新鲜的食材,小可来到了超市。
小可列了一个购买清单,总共有 个食材需要购买,在超市中第 个食材的价格是 。
今天超市正在进行促销活动,每满两个商品,都可以进行促销活动,使用两个商品中最高价格购买当前这两件商品。
为了节省金钱,小可还在线购买了 张超市折扣券,每两件商品可以使用一张折扣券,使用两个商品中最低价格购买当前这两件商品。
注意:商品不能重复参加活动。
请问小可购买清单中所有物品都购买后,最低花费多少元。
输入格式
第一行输入两个整数 ,含义如题所示。
第二行输入 个整数 ,数字以空格分隔,表示每个食材价格。
输出格式
输出一行包含一个整数,表示小可购买清单中所有物品都购买后,最低花费多少元。
输入样例1
输出样例1
输入样例2
输出样例2
4 1
1 2 3 4
4
13 2
1 3 2 4 7 8 9 6 3 8
19
本题需要先进行排序,如果还有优惠券,就用便宜的带贵的,否则一贵带一贵,
利用双指针完成程序。
AC代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
long long n,k,a[1000005],ans;
int main(){
freopen("buy.in","r",stdin);
freopen("buy.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
int l=1,r=n;
while(l<=r){
if(k>0){
ans+=a[l];
l++,r--,k--;
}else{
ans+=a[r];
r-=2;
}
}
cout<<ans;
fclose(stdin);
fclose(stdout);
return 0;
}