题解:
考虑周期类问题就需要先把周期找到,在这里一个周期就是炉子打开到关上所用的时间。所以一个周期就是ceil(k/d)*d的时间。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2010, M = 4000010;
void solve()
{
ll k,d,t,T;
scanf("%lld%lld%lld",&k,&d,&t);
T=k+(k%d==0? 0:(k/d+1)*d-k);//周期长度
double T1=k+(T-k)*0.5;//根据成熟度求得的周期
ll num=t/T1;
double res=0;
res+=num*T;
double tmp=t-num*T1;
if(tmp<k) res+=tmp;
else res+=(k+(tmp-k)*2);
printf("%.1lf\n",res);
}
signed main(){
// memset(head,-1,sizeof head);
solve();
#ifndef ONLINE_JUDGE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}