题意:
一个炉子烤鸡,炉子打开的时候一共$T$分钟可以烤完,关闭的时候一共$2T$分钟可以烤完,炉子每$K$分钟自动关闭,厨师每$D$分钟回来检查,打开炉子
问多长时间烤完..
题解:
用整数写比较稳妥..
显然,整个过程是呈周期性的.
$K>D , t_r = D*(left lfloorfrac{K}{D} ight floor +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 "; else cout<<".0 "; return 0; }