CodeForces_937C Save Energy!(贪心)
题目:
输入三个数字k,d,t,分别代表微波炉自动关的时间、Julia回来的间隔(如果关了就重新打开)、进程需要时间,如果在微波炉开的时候加热效率就是1:1,关的时候效率是1:2,问你最少需要多少妙才能完成加热。
解题报告:
这题是以能覆盖k的d的倍数为周期(这里值得复习),然后分开再处理余数部分就行了下面是代码
#include<cstdio>
typedef long long ll;
#define eps 1e-10
double k,d,t;
int main()
{
while(scanf("%lf%lf%lf",&k,&d,&t)!=EOF)
{
double ti=(long long)((k-1)/d)+1;//刚好覆盖的d的倍数
double p=ti*d;//一个周期的长度
double ans=0;
double tim=(long long)(2*t/(p+k));//p+k为了对应2*t
ans+=tim*p;
double rest=2*t-(p+k)*tim;
if (rest<2*k) ans+=rest/2;
else ans+=k,ans+=rest-2*k;
printf("%.1lf",ans);
}
}