1 条题解
-
0
题解
队列中保存:
任务编号 + 剩余时间每次取队首,执行:
run = min(k, remain);把总时间增加
run。如果剩余时间变成 0,就输出完成信息;否则重新放到队尾。
这是“先到先处理,但未完成任务重新排到末尾”的典型队列应用。
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; long long k; cin >> n >> k; queue<pair<int,long long>> q; for (int i=1;i<=n;++i) { long long t; cin >> t; q.push({i,t}); } long long now=0; while (!q.empty()) { auto [id, rem] = q.front(); q.pop(); long long run=min(k,rem); now += run; rem -= run; if (rem==0) cout << id << ' ' << now << '\n'; else q.push({id,rem}); } return 0; }
- 1
信息
- ID
- 5154
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
粤公网安备44195502000252号