列表

详情


NC206020. 弦

描述

给定一个圆,圆上有2N个互不重叠的点。每次操作随机选择两个先前未选择过的点连一条弦,共连成N条弦,求所有弦不交的概率。

输入描述

一行,只有一个整数N(1≤N≤107)。

输出描述

一行,即答案。答案应以模109+7的形式输出。正式的说,令M=109+7,答案可以表示为最简分数p/q的形式,其中p和q为整数且q与M互质。输出整数x满足 0≤x<M且 x⋅q ≡ p(mod M)。

示例1

输入:

2

输出:

666666672

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 56ms, 内存消耗: 508K, 提交时间: 2020-08-13 22:56:00

#include<bits/stdc++.h>
using namespace std;
 
const int mod=1e9+7;
long long fastpow(long long a,int b)
{
    long long s=1;
    for(;b;b>>=1,a=a*a%mod)if(b&1)s=s*a%mod;
    return s;
}
int main()
{
    int i,s=1,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)s=(long long)s*(i+1)%mod;
    printf("%d\n",fastpow(2,n)*fastpow(s,mod-2)%mod);
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 54ms, 内存消耗: 384K, 提交时间: 2020-07-02 12:19:58

#include<bits/stdc++.h>
using namespace std;

const int mod=1e9+7;
long long fastpow(long long a,int b)
{
	long long s=1;
	for(;b;b>>=1,a=a*a%mod)if(b&1)s=s*a%mod;
	return s;
}
int main()
{
	int i,s=1,n;
	scanf("%d",&n);
	for(i=1;i<=n;i++)s=(long long)s*(i+1)%mod;
	printf("%d\n",fastpow(2,n)*fastpow(s,mod-2)%mod);
    return 0;
}

上一题