链接:https://www.nowcoder.com/acm/contest/207/C
来源:牛客网
Let’s talking about something of eating a pocky. Here is a Decorer Pocky, with colorful decorative stripes in the coating, of length L.
While the length of remaining pocky is longer than d, we perform the following procedure. We break the pocky at any point on it in an equal possibility and this will divide the remaining pocky into two parts. Take the left part and eat it. When it is not longer than d, we do not repeat this procedure.
Now we want to know the expected number of times we should repeat the procedure above. Round it to 6 decimal places behind the decimal point.
输入描述:
The ?rst line of input contains an integer N which is the number of test cases. Each of the N lines contains two ?oat-numbers L and d respectively with at most 5 decimal places behind the decimal point where 1 ≤ d,L ≤ 150.
输出描述:
For each test case, output the expected number of times rounded to 6 decimal places behind the decimal point in a line.
示例1
输入
复制
6 1.0 1.0 2.0 1.0 4.0 1.0 8.0 1.0 16.0 1.0 7.00 3.00
输出
复制
0.000000 1.693147 2.386294 3.079442 3.772589 1.847298
这是2016青岛区域赛题目,我连题都没读懂,然后看了网上的题解,大部分都是直接根据数据推出的规律。。。。。太强了!
我们知道 ln8=2ln4 = 3ln2 然后我们观察对应输入输出数据,会发现
0.693147*2=1.386294
0.693147*3=2.079442
然后每个结果加一就是答案,是不是很神奇。。。。但是并不知道什么原理
#include<bits/stdc++.h>
using namespace std;
int main()
{int t;cin>>t;while(t--){double a,b;cin>>a>>b;if(a<=b){cout<<"0.000000"<<endl;}elseprintf("%.6lf\n",log(a/b)+1);}
}