CF1614A Divan and a Store
题目大意
有 个物品,第 个商品的价格为 。
给你 和 ,表示商人只会选择价格在 内的物品。
商人有 元钱,问你商人最多可以买多少个商品。
共 组数据。
对于 的数据,保证 。
解题思路
贪心,每次买剩下的价格最小的商品。
首先选出满足条件的物品,放到优先队列里(最小值优先)。
然后一件一件弹出来,计算钱数,若钱数 或队列为空,结束程序。
时间复杂度 。
CODE
#include <bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n, l, r, k;
signed main()
{
scanf("%lld", &t);
while (t--)
{
scanf("%lld%lld%lld%lld", &n, &l, &r, &k);
priority_queue<int, vector<int>, greater<int>> q;
for (int i = 1, a; i <= n; ++i)
{
scanf("%lld", &a);
if (a < l || a > r)
continue;
q.push(a);
}
int ans = 0, sum = 0;
while (!q.empty())
{
int now = q.top();
q.pop();
sum += now;
// cout << now << "\n";
if (sum <= k)
ans++;
else
break;
}
printf("%lld\n", ans);
}
return 0;
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122079