【51nod】【堆】小明和他的朋友们
题目
解题思路
将每个朋友当前吃完巧克力的结束时间,和吃一个巧克力的时间丢进堆里维护 因为如果同时,先给吃的速度快的
丢进去时没有被完整吃掉的数量+1,当取出来时(就是在宴请时间前吃完)被完整吃掉的数量+1,不完整-1
巧克力吃完了,只是不再有人进堆,在结束时间前吃完的仍需出堆
代码
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
priority_queue <pair<int,int> > q;
int n,m,s,t,c,b,a[110];
int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%d%d%d",&n,&m,&s);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
b=min(n,m),c=0;
for (int i=1;i<=b;i++)
q.push(make_pair(-a[i],-a[i]));
while (q.size()&&s>=-q.top().first)
{
pair<int,int> w=q.top();
q.pop();
c++,b--;
if (-w.first<s&&m>b+c)
q.push(make_pair(w.first+w.second,w.second)),b++;
}
printf("%d %d\n",c,b);
while (!q.empty()) q.pop();
}
return 0;
}