题意:
一个炉子烤鸡,炉子打开的时候一共$T$分钟可以烤完,关闭的时候一共$2T$分钟可以烤完,炉子每$K$分钟自动关闭,厨师每$D$分钟回来检查,打开炉子
问多长时间烤完..
题解:
用整数写比较稳妥..
显然,整个过程是呈周期性的.
$K>D , t_r = D*(\left \lfloor\frac{K}{D} \right \rfloor +1) $
$K<=D, t_r =D$
将总时间$T*2$,那每个周期提供的完成度 $C=K+D$
答案就可以出来了..
输出的时候除以二 判断一下余数即可;
#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
int casn,n,m,k;
int main(){
ull k,d,t;
cin>>k>>d>>t;
t*=2;
ull ans;
ull ck=0;
if(k>=d&&k%d==0){
ans=t;
}else if(k>d){
ull rnd=d*(k/d+1);
ull ck=rnd+k;
ans=2*rnd*(t/ck);
ull ckt=ck*(t/ck);
if(t%ck){
if(t%ck<=k*2) ans+=(t-ckt);
else ans+=2*(k+(t-ckt-k*2));
}
}else {
ull ck=d+k;
ans=2*d*(t/ck);
ull ckt=ck*(t/ck);
if(t%ck){
if(t%ck<=k*2) ans+=(t-ckt);
else ans+=2*(k+(t-ckt-k*2));
}
}
cout<<ans/2;
if(ans%2) cout<<".5\n";
else cout<<".0\n";
return 0;
}