这道题的翻译不怎么样,它把t2打成了t3,并且没打输入格式。我来补充一下,输入格式是:n,t1,t2,p1,p2,p3,其中n表示这个人用了几次电脑。(然后我输入顺序反了WA几次)

然后我们可以开始讲正事儿了。比如说,这个人从10时刻开始没有用电脑,30时刻又一次使用电脑,t1是10,t2是5,那么我们模拟一下,就可以推出for循环里面的内容了。

那么怎么模拟呢?由于我们假设的t1是10,也就是说,这台电脑需要耗费10时刻的p1能源,然后在20时刻才进入休息状态。可得如下代码:

if(t<t1){he+=t*p1;continue;}
he+=t1*p1;
t-=t1;

然后,还需要5时刻才进入睡眠模式,也就是说这台电脑需要再花费5时刻的p2能源,到25时刻才进入睡眠模式。可得如下代码:

if(t<t2){he+=t*p2;continue;}
he+=t2*p2;
t-=t2;

但还有5时刻才进入第二次使用电脑的30时刻,所以还需要花费5时刻的p3能源,可得如下代码:he+=t*p3;

但是,这个t怎么来的呢?很简单,用两个变量x,y存放上一次输入的起始时间、结束时间(其实只存放结束时间就好),再用这次输入的起始时间减掉y,就得出t了。

注意,如果这是第一次使用电脑的话,把输入的数据复制给x,y,就用continue跳过这次循环了。

献上完整AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>

using namespace std;
int n,t1,t2,p1,p2,p3,a,b,x,y,t,he;
int main()
{
    cin>>n>>p1>>p2>>p3>>t1>>t2;
    for(int i=1; i<=n; i++)
    {
        cin>>a>>b;
        he+=(b-a)*p1;
        t=a-y;
        x=a;
        y=b;//求t,赋值x,y
        if(i==1)continue;
        if(t<t1){he+=t*p1;continue;}
        he+=t1*p1;
        t-=t1;//判断两次使用电脑的时间间隔是否达到t1,能不能进入休息状态
        if(t<t2){he+=t*p2;continue;}
        he+=t2*p2;
        t-=t2;//判断两次使用电脑的时间间隔能否达到t1+t2,能不能进入睡眠状态
        he+=t*p3;//把进入睡眠状态后还剩余的时间,也就是休眠状态的时间,乘上p3,并累加。
    }
    cout<<he;

    return 0;
}