//POJ2051
//题目的大意是给定n个查询请求,每个查询请求有一个ID号,并以时间间隔为m不停发送请求
//要计算前k个到达的请求,如果同一时刻有k个请求,按照id号从小到大排列
#include <cstdio>
#include <vector>
#include <algorithm>
struct Query
{
int id;
int period;
int t;
};
bool cmp(const Query &lhs, const Query &rhs)
{
return lhs.t > rhs.t || (lhs.t == rhs.t && lhs.id > rhs.id);
}
void Solve(int k, std::vector <Query> &queies)
{
int lastPos = (int)queies.size() - 1;
make_heap(queies.begin(), queies.end(), cmp);
while (k-- > 0)
{
Query reachQ = queies.front();
printf("%d/n", reachQ.id);
pop_heap(queies.begin(), queies.end(), cmp);//只是移到末尾,未真正删除
queies[lastPos].t += queies[lastPos].period;
push_heap(queies.begin(), queies.end(), cmp);
}
}
int main()
{
char s[100];
int id, t;
std::vector <Query> queies;
queies.reserve(1000);
Query q;
q.t = 0;
while (scanf("%s", s) && strcmp(s, "#") != 0)
{
scanf("%d %d", &q.id, &q.period);
q.t = q.period;
queies.push_back(q);
}
int k;
scanf("%d", &k);
Solve(k, queies);
return 0;
}
POJ2051 【STL heap的用法】
最新推荐文章于 2021-07-19 12:47:42 发布