题目:
输入三个数字k,d,t,分别代表微波炉自动关的时间、Julia回来的间隔(如果关了就重新打开)、进程需要时间,如果在微波炉开的时候加热效率就是1:1,关的时候效率是1:2,问你最少需要多少妙才能完成加热。
解题报告:
这题是以能覆盖k的d的倍数为周期(这里值得复习),然后分开再处理余数部分就行了下面是代码
#includetypedef long long ll;#define eps 1e-10double 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); }}