题解【CF10A】Power Consumption Calculation

Mr_WA

2019-10-22 13:17:48

Solution

这道题的翻译不怎么样,它把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; } ```