题意:
是给你一个机器,q条命令,b为机器最多能等待的命令数,每条命令给你他的放进机器的时间,和他在机器中需要运行的时间。
如果放进去的命令此时机器有命令在执行,他就要等待,等上一条命令执行完了在进入。如果等待的命令超过b ,这条命令就无法执行。
输出命令执行完的时间,如果无法执行输出-1。
思路:
这题我是模拟做的。last 记录每个执行完的时间,并把时间加入数组,每次进入一个开始时间,如果大于其中的一个,那么他等待的个数就减一。
AC代码:
ll q[maxn],ans[maxn];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
ll n,b;
ll s,e,tot;
ll last,sum,now;
memset(q,0,sizeof(q));
scanf("%I64d%I64d",&n,&b);
tot=0,sum=0;
scanf("%I64d%I64d",&s,&e);
last=s+e;
q[++tot]=last;
ans[1]=last;
now=1;
for(int i=2;i<=n;i++)
{
scanf("%I64d%I64d",&s,&e);
while(q[now]<=s && now<=tot)
{
sum--;
now++;
}
// printf("%I64d\n",sum);
if(s>=last)
{
last=s+e;
q[++tot]=last;
ans[i]=last;
sum=0;
now=tot;
}
else
{
if(sum>=b)
ans[i]=-1;
else
{
last+=e;
sum++;
q[++tot]=last;
ans[i]=last;
}
}
}
for(int i=1;i<=n;i++)
printf("%I64d ",ans[i]);
printf("\n");
return 0;
}
/*
7 3
1 4
7 10
9 6
10 1
13 4
15 3
17 6
*/