组合数
C - 瞬间移动
有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第nn行第mm列的格子有几种方案,答案对10000000071000000007取模。 72280178729722801763489
Input多组测试数据。
两个整数n,m(2≤n,m≤100000)n,m(2≤n,m≤100000)
a==1Output一个整数表示答案Sample Input
4 5
Sample Output
10
解析:找规律,规律为c (n+m-4)(m-2)
AC带码:
#pragma GCC optimize(2) #include<bits/stdc++.h> using namespace std; inline int read() {int x=0,f=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')f=-1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return f*x;} typedef long long ll; const int maxn=5e5+10; const ll M=1000000007; const int INF=0x3f3f3f3f;//c (n+m-4)(m-2) ll n,m; ll j[maxn]; ll kuai(ll a,ll b){ ll ans=1; while(b){ if(b%2==1){ ans=(ans*a)%M; } a=a*a%M; b/=2; } return ans; } ll C(ll n,ll m){ ll ans1=kuai(j[m],M-2)%M*kuai(j[n-m],M-2)%M; return j[n]*ans1%M; } int main(){ ll n,m; j[1]=1; for(ll i=2;i<maxn;i++){ j[i]=i*j[i-1]%M;//阶乘打表 } while(cin>>n>>m){ if(n==1||m==1){ printf("0\n"); } else if(n==2||m==2){ printf("1\n"); } else{ printf("%lld\n",C(n+m-4,m-2)%M); } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!