您的位置:首页 > 其它

Music

2015-08-22 11:21 211 查看
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=111966
题意:

小莉莎喜欢用她的智能手机听歌,但这一手机没有太多内存,所以她通过社交网络下载来听她最爱的歌。但网络不好,而且需要花费长时间来下载。幸好莉莎很耐心。

已知一首歌曲的长度为T秒,当下载完开始的S秒时,莉莎开始听歌。当下载未完成而莉莎已经听完下载部分时,莉莎又从头开始听歌。对于q秒长的时间,网络允许下载歌曲长度为q-1秒。你的任务是计算出一首歌下载完的时间里,莉莎从头听歌的次数。 (2 ≤ q ≤ 104, 1 ≤ S < T ≤ 105)

案例:

Sample Input

Input
5 2 2


Output
2


Input
5 4 7


Output
1


Input
6 2 3


Output
1

分析:
该题类似于追赶相遇问题,可以转化为:
A站到B站的距离为T,一波人从A站出发去B站,首先甲先出发,当他走出离A站距离为S时,A站的乙同时出发,直至乙赶上甲后,若甲仍未抵达B站,
A站里的丙又开始出发追击甲,若甲仍未抵达B站,再又丁从A站出发追击甲,如此反复,直至甲抵达B站。已知甲的速度为每q秒前进(q-1),问甲抵达B
站时,A站出发了多少人(不包括甲)。
这样就很容易理解题意,同时建议画图,这样更容易看出求解过程。
假设乙追上甲时,甲前行了X,乙前行了Y,则有Y=S+X=S+Y/q*(q-1)。化简有Y=S*q,若甲此时仍未抵达终点,则循环上述过程,而需注意的是S
已经转变为上一步的Y!
源代码:


#include<cstdio>
int T,S,q,count=0;
int main()
{
scanf("%d%d%d",&T,&S,&q);
int sum=S;//记录歌曲下载长度
while(sum<T)
{
++count;
sum=q*sum;
}
printf("%d\n",count);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: