//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的用法】
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.