Christmas comes sooner every year. In fact, in one oft-forgotten corner of the world, gift-giving has already started in the form of a Secret Santa syndicate.
Everybody in the small town of Haircombe is going to put their name into a hat. This hat will be given a hearty shuffle, and then afterwards everybody will take turns once more in taking a name back from the hat.
The name each person receives is the name of the fellow citizen to whom they will send a gift.
Of course, one concern with this strategy is that some unfortunate citizens could wind up giving gifts to themselves. What are the chances that this will happen to any of the citizens of Haircombe?
Input
One line containing the number N (1≤N≤1012), the number of citizens who will take part in Secret Santa.
Output
One line containing one real number; the probability that one or more people wind up giving gifts to themselves.
All output must be accurate to an absolute or relative error of at most 10−6.
Sample Input 1 Sample Output 1
2
0.50000000
Sample Input 2 Sample Output 2
3
0.66666667
Sample Input 3 Sample Output 3
6
0.63194444
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;
int main() {
LL n, a = 1;
scanf("%lld", &n);
if (n > 20)
printf("0.632121\n");
else if (n == 1)
printf("1.000000\n");
else {
LL s[20], i;
s[0] = 0;
s[1] = 1;
for (i = 2; i < 20; i++) {
s[i] = i * (s[i - 1] + s[i - 2]);
}
long double ans = s[n - 1];
for (int i = 1; i <= n; i++) {
ans /= i;
}
printf("%6Lf\n", 1 - ans);
}
}
这篇博客探讨了一个小镇上进行的秘密圣诞老人礼物交换活动。每个居民将名字放入帽中,随机抽取名字赠送礼物。文章计算了至少有一人抽到自己名字的概率,并提供了不同人数下的概率值。对于小规模的人群,给出了精确的概率,而对于大规模,给出了近似值。讨论了在不同参与人数下,自我匹配概率的变化趋势。
152

被折叠的 条评论
为什么被折叠?



