代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn = 100005;
int head,tail;
int n,q,c;
struct Node
{
char name[15];
int time;
}p[maxn];
void enqueue( Node x)
{
p[tail] = x;
tail = ( tail + 1 ) % maxn;
}
Node dequeue()
{
Node x = p[head];
head = ( head + 1 ) % maxn;
return x;
}
int main()
{
int sum = 0;
cin>> n >> q;
for(int i=1;i<=n;i++)
{
scanf("%s",p[i].name);
cin>>p[i].time;
}
head = 1; tail = n+1;
Node u;
while( head != tail ) {
u = dequeue();
c = min( q ,u.time ); //执行时间片 q 或所需时间 u.time 的处理
u.time -= c; //计算剩余的所需时间,在后面的操作中将其放在队列里
sum += c; //累计已经经过的时间
if( u.time>0 ) enqueue(u);
else {
cout<<u.name<<" "<<sum<<endl;
}
}
return 0;
}
/*
5 100 // u.time=150
p1 150 //c=100
p2 80 //u.time -= c=50 u.time>0 enqueue(u)
p3 200 //u.time = 80
p4 350 //c=80
p5 20 //u.time -= c=0 不满足u.time>0 直接输出
*/
用STL-queue实现此题: