注意中间结果会超int【这是个坑啊
完整代码:
/*0.015s*/
#include<bits/stdc++.h>
using namespace std;
long long c(long long n, long long r)
{
if (r < 0) return 0;
r = min(r, n - r);
long long ans = 1;
for (long long i = 0; i < r; ++i)
ans = ans * (n - i) / (i + 1);///中间运算结果会超int
return ans;
}
int main()
{
int t;
long long n, r, p;
scanf("%d", &t);
while (t--)
{
scanf("%lld%lld%lld", &n, &r, &p);
r -= n * p;
printf("%lld\n", c(n + r - 1, r));
}
return 0;
}

本文介绍了一种使用C++实现的组合数计算方法,并特别强调了在计算过程中可能遇到的整数溢出问题。通过一个具体的在线评测题目为例,演示了如何避免中间结果超出int类型范围的方法。
3574

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



