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
Output
Input
Output
Input
Output
题意:
小莉莎喜欢用她的智能手机听歌,但这一手机没有太多内存,所以她通过社交网络下载来听她最爱的歌。但网络不好,而且需要花费长时间来下载。幸好莉莎很耐心。
已知一首歌曲的长度为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; }
相关文章推荐
- linux下好用的文本编辑器nano
- Android中Activity四种启动模式和taskAffinity属性详解
- 设计模式—七大原则
- http状态码总结
- S3C2440 驱动程序开发
- Android自定义控件实战——水流波动效果的实现WaveView
- MySQL必知必会(Insert into)
- 黑马程序员-java-反射
- 容器 Collection和Map
- findContours函数参数说明
- VMWARE桥接方式上网【针对公司静态IP】
- Go语言中使用panic和recover简化错误处理
- JSTL标签(可以直接在jsp页面格式化)
- Java多线程通信
- PAT 1087. All Roads Lead to Rome (30)
- 部分真题整理4
- Class org.apache.struts2.json.JSONWriter can not access a member of class oracle.jdbc.driver.Physica
- SQL 获取连续编号中断号的最小值
- Go语言中的单元测试及反向代理
- 将求最长子序列的算法由O(n²)改进为O(n).