B - Queue

cpaojalds1

最終更新日

問題

https://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/3/ALDS1_3_B (新しいタブで開く)

問題文

名前と必要処理時間を持つプロセスが与えられて、順番に処理する。
各プロセスは最大 qq 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 に入れてそのままやるだけ。

コード

https://onlinejudge.u-aizu.ac.jp/status/users/a01sa01to/submissions/1/ALDS1_3_B/judge/6745957/C++17 (新しいタブで開く)

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;
}