上次NOIP过后就没怎么写过代码了,算下来已经有一年多的时间了……

为了ACM,现在开始进行“康复训练”吧!

题意:

模拟看视频场景,用户播放前会先等待T(秒)进行缓冲,然后开始播放。播放时如果遇到卡顿(即遇到未下载的部分)就立即从00:00处重新开始播放。假设从00:00处开始向后下载且保持匀速。给出等待时间T(s)、播放的速度X(KB/s)和下载的速度Y(KB/s),视频总大小S(KB),问把整个视频看完的总时间。

题解:

模拟每一次从00:00到未下载区域消耗的时间,累加即可。

#include<cstdio>
using namespace std;
template<class _T>inline void read(_T &_a)
{
bool f=0; char _c=getchar(); _a=0;
while(_c<'0'||_c>'9'){ if(_c=='-') f=1; _c=getchar(); }
while(_c>='0'&&_c<='9'){ _a=(_a<<3)+(_a<<1)-'0'+_c; _c=getchar(); }
if(f) _a=-_a;
}

int total_cas;
double T,X,Y,S,d,ans,t,del;

int main()
{
read(total_cas);
for(register int cas=1;cas<=total_cas;++cas)
{
scanf("%lf%lf%lf%lf",&X,&Y,&T,&S);
// playing speed, downloading speed, wait time, total size
if(X<=Y) {printf("Case #%d: %.3lf\n",cas,S/X); continue;}
del=X-Y;
d=Y*T;
ans=0;
do{
t=d/del;
ans+=t;
d+=t*Y;
}while(d<S);
ans-=t;
printf("Case #%d: %.3lf\n",cas,ans+S/X);
}
return 0;
}