DS队列--银行单队列多窗口模拟示例代码c++
时间: 2023-11-22 07:04:48 浏览: 109
以下是一个使用C++实现的银行单队列多窗口模拟示例代码,其中使用了DS队列:
```
#include <iostream>
#include <queue>
using namespace std;
struct People {
int t, p;
bool operator < (const People &a) const {
return t > a.t || (t == a.t && p > a.p);
}
};
priority_queue<People> q;
int n, k, ans, cnt;
int main() {
cin >> n >> k;
for (int i = 1; i <= k; i++) {
q.push((People){0, i});
}
for (int i = 1; i <= n; i++) {
int t;
cin >> t;
People p = q.top();
q.pop();
if (p.t > t) {
ans += p.t - t;
}
q.push((People){max(p.t, t) + 1, p.p});
}
cout << ans << endl;
return 0;
}
```
其中,结构体People表示一个顾客,t表示顾客到达时间,p表示顾客所在的窗口编号。使用优先队列priority_queue来模拟银行单队列多窗口的情况,每次取出队列中最早到达的顾客,将其分配到空闲窗口中,同时更新该窗口的状态。如果当前顾客到达时间比窗口空闲时间晚,则需要等待,等待时间累加到ans中。最后输出ans即为总等待时间。
阅读全文