問題
https://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/3/ALDS1_3_B (新しいタブで開く)
問題文
名前と必要処理時間を持つプロセスが与えられて、順番に処理する。
各プロセスは最大 ms (クオンタム) だけ処理され、完了しなければ列の末尾に移動し、次のプロセスを実行する。
このラウンドロビンスケジューリングをシミュレーションしてね。
制約
サンプル
I/O 1
5 100
p1 150
p2 80
p3 200
p4 350
p5 20
p2 180
p5 400
p1 450
p3 550
p4 800
考察
queue に入れてそのままやるだけ。
コード
typedef pair<string, int> P;
int main() {
int n, q;
cin >> n >> q;
queue<P> que;
rep(i, n) {
string s;
int t;
cin >> s >> t;
que.push({ s, t });
}
int now = 0;
while (!que.empty()) {
auto [s, t] = que.front();
que.pop();
if (t <= q) {
now += t;
cout << s << " " << now << endl;
}
else {
t -= q;
now += q;
que.push({ s, t });
}
}
return 0;
}