CF18B Platforms题解

题意翻译

题目描述:在一坐标轴上给出n块板子,每个板子所占的空间为[(k-1)m,(k-1)m+l](l<m),一个青蛙从原点0起跳,每次跳d距离远,问最后青蛙会落在哪里(没落在板子上就结束跳跃) 输入:一行四个整数n,d,m,l 输出:一个整数,即青蛙最后的落点 1<=n,d,m,l<=10^6 l<m

输入格式

第一个输入行包含 4 个整数nn,dd,mm,ll ( 1<=n,d,m,l<=10^{6},l<m1<=ndm,l<=106,l<m) — 分别:平台数量、蚱蜢 Bob 跳跃的长度和数字mm和ll需要查找的坐标kk-第四个平台:[(k-1)米,(k-1)米+升][(k−1)m,(k−1)+l].

输出格式

输出点的坐标,粗心跳汰机将落在该点的位置。不要忘记,如果鲍勃发现自己在平台边缘,他不会摔倒。

输入输出样例

输入 #1复制

2 2 5 3

输出 #1复制

4

输入 #2复制

5 4 11 8

输出 #2复制

20

思路分析:

  这道题的意思就是说判断青蛙的位置是否在木板上,如果不在的话,就输出上一个落点的位置,如果在的话,就让青蛙跳出当前木板,这里采用的方法是判断从起点到当前木板微端可以分成几个d(青蛙单次跳的距离),然后在在最后一次加上d就行了。例如木板尾端距离为7,d为3,此时可以分为2个d,最后一次的位置是6,然后加上d就是9,所以青蛙会跳到9。

#include<stdio.h>
long long n,m,d,l,distance=0;//distance为青蛙当前的位置,从0开始
int main()
{   
    scanf("%lld %lld %lld %lld",&n,&d,&m,&l);
    for(long long k=1;k<=n;k++)//从第一块木板开始循环
    {
        if(distance<(k-1)*m)//如果青蛙当前位置小于当前木板的前端的话,证明青蛙不在当前木板上
        break;//所以直接跳出
       if(distance<=(k-1)*m+l)//如果青蛙当前位置小于当前木板的末端的话,证明青蛙在当前木板上
        distance=((k-1)*m+l)/d*d+d;//所以将青蛙的位置移到刚好跳出木板
       
    }
    printf("%lld",distance);//输出青蛙的上一个落点位置
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值