<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: 19.0666675567627px; background-color: rgb(255, 255, 255);">495. Kids and Prizes</span>
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: 19.0666675567627px; background-color: rgb(255, 255, 255);">495. Kids and Prizes</span>
Time limit per test: 0.25 second(s)
Memory limit: 262144 kilobytes
Memory limit: 262144 kilobytes
input: standard
output: standard
output: standard
ICPC (International Cardboard Producing Company) is in the business of producing cardboard boxes. Recently the company organized a contest for kids for the best design of a cardboard box and selected M winners. There are N prizes for the winners, each one carefully packed in a cardboard box (made by the ICPC, of course). The awarding process will be as follows:
- All the boxes with prizes will be stored in a separate room.
- The winners will enter the room, one at a time.
- Each winner selects one of the boxes.
- The selected box is opened by a representative of the organizing committee.
- If the box contains a prize, the winner takes it.
- If the box is empty (because the same box has already been selected by one or more previous winners), the winner will instead get a certificate printed on a sheet of excellent cardboard (made by ICPC, of course).
- Whether there is a prize or not, the box is re-sealed and returned to the room.
Input
The first and only line of the input file contains the values of N and M (
Output
The first and only line of the output file should contain a single real number: the expected number of prizes given out. The answer is accepted
as correct if either the absolute or the relative error is less than or equal to 10-9.
Example(s)
sample input |
sample output |
5 7 |
3.951424 |
sample input |
sample output |
4 3 |
2.3125 |
dp[i]代表第i个人摸到奖品的概率,如果第i-1个人没摸到,则为dp[i-1],如果摸到则为dp[i-1]-1/n。
dp[i]=dp[i-1](1-dp[i-1])+dp[i-1](dp[i-1]-1/n)=dp[i-1]*(1-1/n);
我们发现是一个等比数列,dp[1]=1,对其求和即可.
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
double e,ex;
int main(void)
{
int m,n;
while(scanf("%d%d",&n,&m)!=EOF)
{
e=1-1.0/n;
ex=1;
while(m){
if(m&1)ex*=e;
m>>=1;e*=e;
}
printf("%.10lf\n",(1-ex)*n);
}
return 0;
}