UVALIVA-8076

Jim想起了初中生物书上的蛋白质,于是要锻炼肌肉。当然这一段是跟题意没关系的。
健身房有十台机器,现在给出了Jim在每台机器的锻炼时间和休息时间,机器不是Jim专属的,
每个机器上还有一个专一锻炼者在锻炼,专一锻炼者有自己的锻炼时间,休息时间和开始时间,
在开始时间之后,就开始不停的在这台机器上锻炼休息锻炼休息循环往复,
(专一锻炼者只用一个机器,相当专一了)
Jim在0时刻从1号机器开始锻炼,一直锻炼到10号机器,要锻炼三个来回。
问锻炼完之后一共需要多少时间,最后一个锻炼的休息时间不计算在内。
代码:
 

#include <bits/stdc++.h>
using namespace std;
#define ll long long int
const int inf=0x3f3f3f3f;
double pi=3.141592653589793238462643383279502884;
const ll mod=1e9+7;
const int maxn=300005;
int use[35],rest[35];
int u1[11],r1[11],st[11];
int ans;
int main()
{
  while(~scanf("%d %d",&use[1],&rest[1]))
  {
      ans=0;
      for(int i=2;i<=10;i++)
        scanf("%d %d",&use[i],&rest[i]);
      for(int i=1;i<=10;i++)
        scanf("%d %d %d",&u1[i],&r1[i],&st[i]);
      for(int i=1;i<=30;i++)
      {
        //锻炼第几个器材
        int j=0;
        if(i%10==0)
           j=10;
        else
           j=i%10;
        if(st[j]>ans)//专一锻炼者还没开始
        {
           ans+=(use[j]+rest[j]);
           if(st[j]<=ans-rest[j])//更新st[j]
             st[j]=ans-rest[j];
        }
        else
          if(ans>=st[j])
          {
           while(st[j]+u1[j]+r1[j]<=ans)
                st[j]+=(u1[j]+r1[j]);//找最近一次的专一锻炼者开始时间
           if(ans<=st[j]+u1[j])//专一锻炼者正在健身
           {
                ans=st[j]+u1[j];//等锻炼者锻炼完我进行
                ans+=(use[j]+rest[j]);
                st[j]=max(st[j]+u1[j]+r1[j],ans-rest[j]);//更新st[j]
           }
           else//锻炼者正在休息,Jim先进行,更新st[j]
           {
                ans+=(use[j]+rest[j]);
                st[j]=max(st[j]+u1[j]+r1[j],ans-rest[j]);
           }
          }
      }
      ans=ans-rest[10];
      printf("%d\n",ans);
  }
  return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值