题解 | 小红走矩阵

小红走矩阵

https://www.nowcoder.com/practice/1ae49fb83b3f404f89dc0933bb8a0694

#include<bits/stdc++.h>
using namespace std;
//根据排列组合的小知识,从起点到终点一共要走n-1步向下,m-1步向右
//因此总步数为(m+n-2)!/(m-1!*n-1!),其中(m+n-2)!为所有元素全排列,除去相同元素内部排列即可
//由于这个数计算量太大,因此需要使用费马小定理与逆元的知识
const int MOD=998244353;
long long fact[2000];//存储阶乘,m、n均小于1000

//快速幂
long long qpow(long long base,long long power){
    long long result = 1;
    base = base % MOD;//先取模防止溢出
    while(power>0){
        if(power % 2 == 1){//指数为奇数
            result = result * base % MOD;
        }
        base = base*base %MOD;
        power = power >> 1;//除2
    }
    return result;
}

//预处理
void pre_fact(){
    fact[0]=1;
    for(int i=1;i<2000;i++){
        fact[i] = fact[i-1] * i % MOD;
    }
}

//计算组合数对MOD取模
long long C(int a,int b){
    return fact[a] * qpow(fact[b],MOD-2) % MOD * qpow(fact[a-b],MOD-2) % MOD;//逆元小技巧
}

int main(){
    int m,n;
    cin>>m>>n;
    pre_fact();
    long long ans = C(m+n-2,n-1);
    cout<<ans<<endl;
    return 0;
}
//ciallo~

全部评论

相关推荐

StephenZ_:我9月份找的第一段实习也是遇到这种骗子公司了,问他后端有多少人和我说7个正职,进去一看只有一个后端剩下的都是产品前端算法(没错甚至还有算法)。还是某制造业中大厂,我离职的时候还阴阳怪气我
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务