1.练习项目:
问题描述
小蓝想要给她的女朋友小桥买一份生日礼物,她来到了一家礼品店。在店里,她看中了 N 件物品,每件物品都有一个价格 Ai。
小蓝手中有 K 元钱和一张 50% 的折扣券,可以在购买任意一件物品时使用。使用折扣券后,购买该物品的价格为原价的一半向上取整。
对于一件价值为 X 的物品,当小蓝使用折扣卷后,他只需要花费 ⌈x/2⌉ 元即可带走该商品。
请帮助小蓝确定,在使用折扣券的情况下,她最多能够购买多少件物品送给小桥作为生日礼物。
输入格式
第一行是两个整数 N 和 K,分别表示物品的数量和小蓝手中的预算。
接下来一行是 N 个整数,表示每个物品的价格 Ai。
数据范围保证:1≤N≤1e5,1≤Ai≤1e9,0≤K≤1e9。
输出格式
输出一个整数,表示在使用折扣券的情况下,小蓝最多可以购买多少件物品作为生日礼物。
2.选择课程
在蓝桥云课中选择课程《16届蓝桥杯省赛无忧班(C&C++ 组)4期》,选择第二章"基础算法"编程30并开始练习。
3.开始练习
(1)源码:
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
priority_queue<ll,vector<ll>,greater<ll>>pq;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,k,x;cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>x;
pq.push(x);
}
ll ans=0;
for(int i=1;i<=n;i++){
if(k==0){
break;
}
ans++;
k-=pq.top();
pq.pop();
if(k-pq.top()<0){
if(k-pq.top()/2+(pq.top()%2?0:1)<0){
break;
}
}
}
cout<<ans<<'\n';
return 0;
}
(2)检验结果
对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。
(3)练习心得:注意每段代码末尾的分号是否存在,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。