1. 程式人生 > >2016青島icpc網路C

2016青島icpc網路C

Pocky

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2306    Accepted Submission(s): 1247  

Problem Description

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.

Input

The first line of input contains an integer N which is the number of test cases. Each of the N lines contains two float-numbers L and d respectively with at most 5 decimal places behind the decimal point where 1 ≤ d, L ≤ 150.

Output

For each test case, output the expected number of times rounded to 6 decimal places behind the decimal point in a line.

Sample Input

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

Sample Output

0.000000 1.693147 2.386294 3.079442 3.772589 1.847298

Source

Recommend

jiangzijinh額2015

這是一位大佬的數學解題過程。

這道題在比賽的時候是找數字規律後再猜出最後的數學公式做出來的,數學素養真的很重要啊!要要不然連看到一些數字都無法感到敏感啊! 比如說: log10(2):0.301030 log10(3):0.477121 log10(5):0.698970 log10(7):0.845098 ln(2):0.693147 ln(3):1.098612 ln(5):1.609438

ps:最近在學概率論,對期望值的求法也有所瞭解所以在理解題意方面也有幫助。 感謝隊友一直陪伴分析資料!

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

double L, d;

int main()
{
    int N;
    cin >> N;

    while (N--)
    {
        cin >> L >> d;

        if (L <= d)
        {
            cout << "0.000000\n";
        }
        else
        {
            printf("%.6f\n", 1 + log(L / d));
        }
    }

    return 0;
}