G.Birthday Paradox
题面:
中文题意:
m个人,n个不同天数,问生日状况成给定的情况的概率。
思路
代码:
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn = 500 + 10;
int a[maxn];
int tot[maxn];
int main() {
int n;
cin>>n;
int sum = 0;
for(int i = 0; i < n; i++) {
cin>>a[i];
tot[a[i]]++;
sum += a[i];
}
double ans = sum * -1 * log10(365);
for(int i = 365; i > 365 - n; i--) ans += log10(i);
for(int i = 1; i <= sum; i++) {
ans += log10(i);
}
for(int i = 0; i < n; i++) {
for(int j = 1; j <= a[i]; j++) {
ans -= log10(j);
}
}
for(int i = 1; i <= 365; i++) {
if(tot[i]) {
for(int j = 1; j <= tot[i]; j++) {
ans -= log10(j);
}
}
}
cout<<fixed<<setprecision(15)<<ans<<endl;
}