参考博客
提交链接
FROM SDUT 2018 Summer Team Contest 8th 地址
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
/* 题意 :【模拟】健身中心一共有10台健身机,我从1-10按照顺序 共锻炼3次, 我在每台健身机上有两个时间,一个是锻炼时间,另一个是休息时间 另外每台健身机都有一个捣乱的人在不停的循环锻炼,他们也有 两个时间,一个是锻炼时间,另一个是休息时间。因此他们可能会耽搁到 我进行锻炼,他们还有一个到达时间,指他们第一次开始锻炼的时间。 在同一时间假如我和捣乱的人同时到达一台健身机,我会让给他们进行锻炼。 假定我在0时刻开始打算在第一台健身机上去锻炼。我在最后一次锻炼后 的时间可以忽略不计。 按照题意进行模拟即可。 */
int main()
{
int duan[40],xiu[40];
int d[40],x[40],st[40];
for(int i=1;i<=10;i++)
{
cin>>duan[i]>>xiu[i];
}
for(int i=1;i<=10;i++)
{
cin>>d[i]>>x[i]>>st[i];
}
int sum = 0;
for(int i=1;i<=30;i++)
{
int j = i%10==0?10:i%10;
//cout<<j<<endl;
if(sum>=st[j])
{
int tmp = sum-st[j];
int k = tmp/(d[j]+x[j])*(d[j]+x[j]);
//求出我在等待之后可以开始使用机器的时间
//假如sum = 20,d[j] = 2 x[j] = 3,st[j] = 12
//那么求出k = 5, st[j]+=(5+2);st[j] = 19
st[j]+=(k+d[j]);
sum =max(sum,st[j]);
st[j]+=x[j];
//经过上述操作后,第j个捣乱的人的开始时间肯定刚好大于sum
//并且sum取了sum,st[j],使得在下面计算时保证了我不被其他人耽搁
}
//假如当前时间早于在该机器上的到达时间
sum+=duan[j];
st[j] = max(sum,st[j]);
//更新捣乱的人的到达时间,因为他因为我被耽搁了
sum += xiu[j];
}
cout<<sum-xiu[10]<<endl;
return 0;
}