题解【CF10A】Power Consumption Calculation
Mr_WA
2019-10-22 13:17:48
这道题的翻译不怎么样,它把t2打成了t3,并且没打输入格式。我来补充一下,输入格式是:n,t1,t2,p1,p2,p3,其中n表示这个人用了几次电脑。~~(然后我输入顺序反了WA几次)~~
然后我们可以开始讲正事儿了。比如说,这个人从10时刻开始没有用电脑,30时刻又一次使用电脑,t1是10,t2是5,那么我们模拟一下,就可以推出for循环里面的内容了。
那么怎么模拟呢?由于我们假设的t1是10,也就是说,这台电脑需要耗费10时刻的p1能源,然后在20时刻才进入休息状态。可得如下代码:
```c
if(t<t1){he+=t*p1;continue;}
he+=t1*p1;
t-=t1;
```
然后,还需要5时刻才进入睡眠模式,也就是说这台电脑需要再花费5时刻的p2能源,到25时刻才进入睡眠模式。可得如下代码:
```c
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代码:
```c
#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;
}
```