1. 程式人生 > >CodeForces 937C Save Energy! 水題

CodeForces 937C Save Energy! 水題

true 回來 sig spa \n cas highlight CP fine

題意:

  一個爐子烤雞,爐子打開的時候一共$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;
}

CodeForces 937C Save Energy! 水題