Play the Dice
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1328 Accepted Submission(s): 429
Special Judge
The first line is an integer n (2<=n<=200), following with n integers ai(0<=ai<200)
The second line is an integer m (0<=m<=n), following with m integers bi(1<=bi<=n), which are the numbers of the special sides to get another more chance.
0.00
思路:一次投擲能拿sum/n;如果投擲到有顏色的m個面中的任意一個,會額外得到sum*m/n/n,以此類推,最終的期望就是sum/n*((n/m)^0+(n/m)^1+(n/m)^2+……)。等比數列求和公式,算出來是(1-(n/m)^∞)/(1-(n/m));當n == m時,(n/m)^∞ == 1,所以原式結果是0,當n !=m時,(n/m)^∞ 趨近於 0,則原式變爲sum/n*/(1 - (n/m))也就是sum/(n-m)。
一開始寫的遞推公式,怎麼都不過,後來發現無論是什麼樣例,結果都是sum/(n-m),交了一發竟然對了,後來才明白是這麼回事。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<set>
using namespace std;
double ans,pre;
int n;
int main()
{
int m;
while(scanf("%d",&n)!=EOF)
{
ans = 0.00;
for(int i = 0;i < n;i++)
{
int num;
scanf("%d",&num);
ans+=num;
}
scanf("%d",&m);
for(int i = 0;i < m;i++)
{
int num;
scanf("%d",&num);
}
if(ans == 0)
{
printf("0.00\n");
continue;
}
if(m == n)
printf("inf\n");
else
printf("%.2lf\n",ans/(n-m));
}
return 0;
}