AcWing 889. 奶酪宝宝,AC代码。
原题链接
简单
作者:
奶酪宝宝
,
2025-04-14 20:36:16
· 山东
,
所有人可见
,
阅读 1
#include <iostream>
#define ZERO 0
using namespace std;
const int N = 100000 + 10;
const int model = 1e9 + 7;
int numberParameter;
void declaration(){
scanf("%d", &numberParameter);
}
long long factorial[2 * N];
long long factorialInverse[2 * N];
long long inverseNumber(long long numberToTransform, int model){
int exponent = model - 2;
long long power = 1;
long long multiplyFactor = numberToTransform;
while(exponent != ZERO){
if((exponent & 1) != ZERO){
power = power * multiplyFactor % model;
}
exponent >>= 1;
multiplyFactor = multiplyFactor * multiplyFactor % model;
}
return power;
}
long long factorialCalculation(){
factorial[0] = 1;
factorialInverse[0] = 1;
for (int factorialNumber = 1; factorialNumber <= 2 * numberParameter; factorialNumber ++){
factorial[factorialNumber] = factorial[factorialNumber - 1] * factorialNumber % model;
factorialInverse[factorialNumber] = factorialInverse[factorialNumber - 1] * inverseNumber(factorialNumber, model) % model;
}
}
long long result = 1;
void resultCalculation(){
result = result * factorial[2 * numberParameter] % model;
result = result * factorialInverse[numberParameter] % model * factorialInverse[numberParameter] % model;
result = result * inverseNumber(numberParameter + 1, model) % model;
}
void outputResult(){
printf("%lld", result);
}
int main(){
declaration();
factorialCalculation();
resultCalculation();
outputResult();
return 0;
}