• 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
    ",count);
    13     return 0;
    14 }
  • 相关阅读:
    转来的:Diablo中的七大套装背景
    我的单元测试认识之路(下)
    《You can do it!》的chapter 2笔记
    一个枚举的简单应用
    仿百度的搜索下拉提示
    简单的 菜单当前选中 解决思路
    单元测试框架NUnit 之 Attributes特性(一)
    单元测试框架NUnit 之 constraints 约束
    分享个自己的ajax封装
    开源单元测试工具 Nunit
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4749875.html
Copyright © 2020-2023  润新知