hdu 5417 Victor and Machine

来源:互联网 发布:淘宝网新生活化妆品 编辑:程序博客网 时间:2024/05/29 18:12

题目:

Victor有一个机器,这个机器每次开启的瞬间会弹出一个小球,之后每隔ww秒会弹出一个小球。因为机器不是很完善,该机器每开启xx秒就得关闭yy秒进行调整,在机器关闭的瞬间可能会有小球弹出,关闭之后一直到下一次开启之前都不会有小球弹出。00时刻,机器第一次开启,Victor想要知道第nn个小球弹出的时刻,你能够告诉他吗?


分析:

当x<w时,显然只有在每次机器开启的时刻,才会弹出一个球,0时刻已经弹出一个,那么第n个球弹出的时刻为:(n-1)*(x+y)

当x>=w时,每个周期(开启到关闭机器持续时间x+y)弹出的球个数为1+x/w个,设为p=1+x/w,令T=n/p,如果p能够整除n,那么将会在第T个周期弹出第n个球,弹出的时刻为(T-1)*(x+y)+x/w*w;若p不能整除n,那么将在第T+1个周期弹出第n个球,弹出时刻为T*(x+y)+(n-1)%p*w。注意后面是(n-1)%p*w,因为除去在0时刻弹出的那个球,弹出的球实际上是第n-1个。

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int main(){    int x,y,w,n;    while(~scanf("%d%d%d%d",&x,&y,&w,&n))    {        int ans;        if(x>=w)        {            int p=1+x/w;            if(n%p==0) ans=(n/p-1)*(x+y)+w*(x/w);            else ans=n/p*(x+y)+(n-1)%p*w;        }else ans=(n-1)*(x+y);        printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击