题目链接http://codeforces.com/problemset/problem/820/A
Mister B once received a gift: it was a book about aliens, which he started read immediately. This book had c pages.
At first day Mister B read v0 pages, but after that he started to speed up. Every day, starting from the second, he read a pages more than on the previous day (at first day he read v0 pages, at second — v0 + a pages, at third — v0 + 2a pages, and so on). But Mister B is just a human, so he physically wasn't able to read more than v1 pages per day.
Also, to refresh his memory, every day, starting from the second, Mister B had to reread last l pages he read on the previous day. Mister B finished the book when he read the last page for the first time.
Help Mister B to calculate how many days he needed to finish the book.
First and only line contains five space-separated integers: c, v0, v1, a and l (1 ≤ c ≤ 1000, 0 ≤ l < v0 ≤ v1 ≤ 1000, 0 ≤ a ≤ 1000) — the length of the book in pages, the initial reading speed, the maximum reading speed, the acceleration in reading speed and the number of pages for rereading.
Print one integer — the number of days Mister B needed to finish the book.
5 5 10 5 4
1
12 4 12 4 1
3
15 1 100 0 0
15
有一本书共c页,一个人他想要看这本书,他第一天看v0页,第二天看v0+a页(但是要先复习前一天看的L页,也就是第二天提前L页看),第三天看v0+2*a页(也要提前L页看)......但是他每天最多能够看书v1页。
解题思路:
这就是一个简单的数学问题,需要注意的是:第一天他不应复习着看;书一旦看完就是结束观看。
代码:
#include<iostream>
using namespace std;
int main()
{
int c,v0,v1,v,a,l,page;
while(cin>>c>>v0>>v1>>a>>l)
{
int i=0;
for(;;i++)
{
if(i==0) //第一天就是v0,不多看,也就是没有加速度
v=v0;
else
v=v0+i*a;
if(v>=v1) //如果当天看书的页数超过最大看书页数,那么只能按照最大看书页数进行看书
v=v1;
if(i==0) //i=0表示第一天,第一天不用复习着看,所以不用+L
c=c-v;
else
c=c-v+l; //不是第一天的话,需要复习着看,剩余的页数还需要+L
if(c<=0)
break;
}
cout<<i+1<<endl; //i是从0开始的,所以天数应+1
}
return 0;
}