AcWing 886. 奶酪宝宝:解决问题了,原因在于mod变量混用。
原题链接
简单
作者:
奶酪宝宝
,
2025-04-09 19:18:47
· 山东
,
所有人可见
,
阅读 2
#include <iostream>
#define DEGENERATE 2
#define ZERO 0
using namespace std;
const int N = 10000 + 10;
const int parameter = 100000 + 10;
int queryNumber;
void declaration(){
scanf("%d", &queryNumber);
}
long long factorial[parameter];
long long inverseFactorial[parameter];
const int mod = 1e9 + 7;
long long quickPowerToInverse(int numberToTransform, int modelForExponent){
if (modelForExponent == DEGENERATE) return 1;
else if (modelForExponent > DEGENERATE){
long long multiplyAccumulation = 1;
long long multiplyFactor = numberToTransform;
modelForExponent = modelForExponent - 2;
while (modelForExponent != ZERO){
if ((modelForExponent & 1) != ZERO){
multiplyAccumulation = (long long)multiplyAccumulation * multiplyFactor % mod;
}
modelForExponent >>= 1;
multiplyFactor = (long long)multiplyFactor * multiplyFactor % mod;
}
return multiplyAccumulation;
}
}
void createMemorandum(){
factorial[0] = inverseFactorial[0] = 1;
for (int rank = 1; rank <= parameter; rank ++){
factorial[rank] = factorial[rank - 1] * rank % mod;
inverseFactorial[rank] = inverseFactorial[rank - 1] * quickPowerToInverse(rank, mod) % mod;
}
}
void queries(){
while (queryNumber --){
int upNumber, downNumber;
scanf("%d%d", &downNumber, &upNumber);
long long combinationNumber = factorial[downNumber] * inverseFactorial[upNumber] % mod * inverseFactorial[downNumber - upNumber] % mod;
printf("%lld\n", combinationNumber);
}
}
int main(){
declaration();
createMemorandum();
queries();
return 0;
}