codeforces 569A__Music
2015-08-19 15:12
363 查看
A. Music
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Little Lesha loves listening to music via his smartphone. But the smartphone doesn't have much memory, so Lesha listens to his favorite songs in a well-known social network InTalk.
Unfortunately, internet is not that fast in the city of Ekaterinozavodsk and the song takes a lot of time to download. But Lesha is quite impatient. The song's duration is T seconds.
Lesha downloads the first S seconds of the song and plays it. When the playback reaches the point that has not yet been downloaded,
Lesha immediately plays the song from the start (the loaded part of the song stays in his phone, and the download is continued from the same place), and it happens until the song is downloaded completely and Lesha listens to it to the end. For q seconds
of real time the Internet allows you to download q - 1 seconds of the track.
Tell Lesha, for how many times he will start the song, including the very first start.
Input
The single line contains three integers T, S, q (2 ≤ q ≤ 104, 1 ≤ S < T ≤ 105).
Output
Print a single integer — the number of times the song will be restarted.
Sample test(s)
input
output
input
output
input
output
Note
In the first test, the song is played twice faster than it is downloaded, which means that during four first seconds Lesha reaches the moment that has not been downloaded, and starts the song again. After another two seconds, the song is downloaded completely,
and thus, Lesha starts the song twice.
In the second test, the song is almost downloaded, and Lesha will start it only once.
In the third sample test the download finishes and Lesha finishes listening at the same moment. Note that song isn't restarted in this case.
题意:一首歌一共有T秒,s表示第一次下载的秒数,q表示每q秒可以下载(q-1)秒这首歌,第一次下载结束后,每次播放的同时会下载。求一共从头开始播放的次数。
题解:一道很好的想法题,每当播放到之前的未download处时,由于播放的同时也在下载,所以总会再次下载了一些,理论上会无限循环播放和下载,但总会有个极限,可以记为S(当前可播放的时间)。
S=s+s*(q-1)/q+s*(q-1)/q*(q-1)/q+...。运用等比数列求和可以得知当n->+∞时,S=s*q;
当播放到第i次的时候S=s*(q^i)。使S>=T即可。
代码如下:
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Little Lesha loves listening to music via his smartphone. But the smartphone doesn't have much memory, so Lesha listens to his favorite songs in a well-known social network InTalk.
Unfortunately, internet is not that fast in the city of Ekaterinozavodsk and the song takes a lot of time to download. But Lesha is quite impatient. The song's duration is T seconds.
Lesha downloads the first S seconds of the song and plays it. When the playback reaches the point that has not yet been downloaded,
Lesha immediately plays the song from the start (the loaded part of the song stays in his phone, and the download is continued from the same place), and it happens until the song is downloaded completely and Lesha listens to it to the end. For q seconds
of real time the Internet allows you to download q - 1 seconds of the track.
Tell Lesha, for how many times he will start the song, including the very first start.
Input
The single line contains three integers T, S, q (2 ≤ q ≤ 104, 1 ≤ S < T ≤ 105).
Output
Print a single integer — the number of times the song will be restarted.
Sample test(s)
input
5 2 2
output
2
input
5 4 7
output
1
input
6 2 3
output
1
Note
In the first test, the song is played twice faster than it is downloaded, which means that during four first seconds Lesha reaches the moment that has not been downloaded, and starts the song again. After another two seconds, the song is downloaded completely,
and thus, Lesha starts the song twice.
In the second test, the song is almost downloaded, and Lesha will start it only once.
In the third sample test the download finishes and Lesha finishes listening at the same moment. Note that song isn't restarted in this case.
题意:一首歌一共有T秒,s表示第一次下载的秒数,q表示每q秒可以下载(q-1)秒这首歌,第一次下载结束后,每次播放的同时会下载。求一共从头开始播放的次数。
题解:一道很好的想法题,每当播放到之前的未download处时,由于播放的同时也在下载,所以总会再次下载了一些,理论上会无限循环播放和下载,但总会有个极限,可以记为S(当前可播放的时间)。
S=s+s*(q-1)/q+s*(q-1)/q*(q-1)/q+...。运用等比数列求和可以得知当n->+∞时,S=s*q;
当播放到第i次的时候S=s*(q^i)。使S>=T即可。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int main() { int T,s,q; while(~scanf("%d%d%d",&T,&s,&q)) { int S=s,i=0; while(S<T) { S=S*q; i++; } printf("%d\n",i); } return 0; }
相关文章推荐
- PHP设计模式之组合模式
- Android View的小结
- sshd源码下载与编译安装
- 【C++对象模型】使用gcc、clang和VC++显示C++类的内存布局
- hdu2044 dp
- 编写高质量代码改善C#程序的157个建议——建议74:警惕线程的IsBackground
- Linux 静态IP地址设置
- js实现文本框只允许输入数字并限制数字大小的方法
- 电脑经验--三星S4显示互联网连接缓慢,网络已被禁用
- 【Android】pull解析xml文件+将数据存储为xml格式,并保存在内存里
- 交叉编译的configure
- 统计学方法与数据分析学习笔记1
- hibernate某些版本(4.3)下报错 NoSuchMethodError: javax.persistence.Table.indexes()
- 电脑经验--IPTV设置
- Struts2的ResultType和Action处理链
- 走吧走吧,拿着更多的票子把活干吧!
- Lua 语言基础
- 海量数据查找中位数
- BPM那些事儿——BPM流程管理软件的五大创新
- 教你如何做个有“钱”途的测试工程师