大佬们可以帮我看一下c题吗?

#include <iostream>
#include <vector>

using namespace std;

long long cab(int a, int b){
    long long ans = 1;
    for(int i = 0; i < b; i++){
        ans *= a-i;
        ans /= i+1;
    }
    return ans;
}
int main(){
    int N, a, b;
    cin >> N >> a >> b;
    N = (N-1)*N/2;
    int mod = 1e9+7;
    long long total = (cab(N, a) * cab(N, b)) % mod;
    if(a + b <= N){
        long long wu = (cab(N, a) * cab(N-a, b)) % mod;
        total = (total-wu+mod) % mod;
    }
    cout <<total;
    return 0;
}
思路就是先找一共有多少种情况,然后减去一条公共边都没有的,就是至少有一条公共边的数量。但是这样答案不对,大佬们可以帮我看一下吗,是思路问题还是代码问题?
全部评论
如果是思路问题,那肯定代码也有问题,如果思路没有问题,那就一定是代码写的有问题
1 回复 分享
发布于 2021-11-27 14:59
公式没问题,组合数计算的问题,1000的阶乘肯定整数溢出,同余也不能直接做除法,因而这个地方需要求逆元,具体做法看其他人代码就好了
1 回复 分享
发布于 2021-11-27 15:56

相关推荐

03-04 19:02
云南大学 Java
Yki_:没挂,只是没人捞,该干啥干啥,等着就好了
点赞 评论 收藏
分享
Hello_WordN:一眼乱,先把自己的简历整得简洁一点,尽量缩小到1-2页,不知道还以为你做的ppt呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务