Music

题目链接: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!
源代码:
 1 #include<cstdio>
 2 int T,S,q,count=0;
 3 int main()
 4 {
 5     scanf("%d%d%d",&T,&S,&q);
 6     int sum=S;//记录歌曲下载长度
 7     while(sum<T)
 8     {
 9         ++count;
10         sum=q*sum;
11     }
12     printf("%d\n",count);
13     return 0;
14 }

 

posted @ 2015-08-22 11:21  ~瞬间*  阅读(132)  评论(0编辑  收藏  举报