为了账号安全,请及时绑定邮箱和手机立即绑定

2014年【google code jam】Qualification Round B

标签:
C

以后的题目,我都尽量把流程图附上,代码还是算了,毕竟,程度要写出来,才是自己的。
B. Cookie Clicker Alpha
Introduction
Cookie Clicker is a Javascript game by Orteil, where players click on a picture of a giant cookie. Clicking on the giant cookie gives them cookies. They can spend those cookies to buy buildings. Those buildings help them get even more cookies. Like this problem, the game is very cookie-focused. This problem has a similar idea, but it does not assume you have played Cookie Clicker. Please don't go play it now: it might be a long time before you come back.
Problem
In this problem, you start with 0 cookies. You gain cookies at a rate of 2 cookies per second, by clicking on a giant cookie. Any time you have at least C cookies, you can buy a cookie farm. Every time you buy a cookie farm, it costs you C cookies and gives you an extra F cookies per second.
Once you have X cookies that you haven't spent on farms, you win! Figure out how long it will take you to win if you use the best possible strategy.
Example
Suppose C=500.0, F=4.0 and X=2000.0. Here's how the best possible strategy plays out:
· You start with 0 cookies, but producing 2 cookies per second.
· After 250 seconds, you will have C=500 cookies and can buy a farm that producesF=4 cookies per second.
· After buying the farm, you have 0 cookies, and your total cookie production is 6 cookies per second.
· The next farm will cost 500 cookies, which you can buy after about 83.3333333seconds.
· After buying your second farm, you have 0 cookies, and your total cookie production is 10 cookies per second.
· Another farm will cost 500 cookies, which you can buy after 50 seconds.
· After buying your third farm, you have 0 cookies, and your total cookie production is 14 cookies per second.
· Another farm would cost 500 cookies, but it actually makes sense not to buy it: instead you can just wait until you have X=2000 cookies, which takes about142.8571429 seconds.
Total time: 250 + 83.3333333 + 50 + 142.8571429 = 526.1904762 seconds.
Notice that you get cookies continuously: so 0.1 seconds after the game starts you'll have 0.2 cookies, and π seconds after the game starts you'll have 2π cookies.
Input
The first line of the input gives the number of test cases, T. T lines follow. Each line contains three space-separated real-valued numbers: C, F and X, whose meanings are described earlier in the problem statement.
C, F and X will each consist of at least 1 digit followed by 1 decimal point followed by from 1 to 5 digits. There will be no leading zeroes.
Output
For each test case, output one line containing "Case #x: y", where x is the test case number (starting from 1) and y is the minimum number of seconds it takes before you can have X delicious cookies.
We recommend outputting y to 7 decimal places, but it is not required. y will be considered correct if it is close enough to the correct number: within an absolute or relative error of 10-6. See the FAQ for an explanation of what that means, and what formats of real numbers we accept.
Limits
1 ≤ T ≤ 100.
Small dataset
1 ≤ C ≤ 500.
1 ≤ F ≤ 4.
1 ≤ X ≤ 2000.
Large dataset
1 ≤ C ≤ 10000.
1 ≤ F ≤ 100.
1 ≤ X ≤ 100000.
Sample

Input

Output

4
30.0 1.0 2.0
30.0 2.0 100.0
30.50000 3.14159 1999.19990
500.0 4.0 2000.0

Case #1: 1.0000000
Case #2: 39.1666667
Case #3: 63.9680013
Case #4: 526.1904762

Note
Cookie Clicker was created by Orteil. Orteil does not endorse and has no involvement with Google Code Jam.

这个题目很有意思,典型的递归应用。思路如下:一开始速率是2,那么,就能计算出不买农场的时间:x/2 与买一个农场的时间:(c/curF + x/(f+curF)) (其中,curF中当前速率、f是买下农场后增加的速率、c是农场值、x是目标值) 如果买农场的时候较短,则进行下一层递归:是再买一个农场还是不买。

简单的画了下程序流程图,供参考:

程序流程图

点击查看更多内容
9人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Linux系统工程师
手记
粉丝
3
获赞与收藏
18

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消