Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34835 | 22级廖思学 | 【S】T4 | C++ | 通过 | 100 | 25 MS | 3380 KB | 885 | 2024-11-14 21:33:06 |
#include<bits/stdc++.h> using namespace std; #define ll long long const ll N=1e5+10,M=998244353; int t,n,m; ll jc[N<<1],ny[N<<1]; ll ksm(ll a,ll b){ ll ans=1; while(b>0){ if(b&1)ans=ans*a%M; a=a*a%M;b>>=1; }return ans; } signed main(){ scanf("%d",&t); jc[0]=1;ny[0]=1; for(int i=1;i<=N*2-5;i++){jc[i]=jc[i-1]*i%M;ny[i]=ksm(jc[i],M-2);} while(t--){ scanf("%d%d",&n,&m); ll ans=0; for(int k=1;k<=n/m;k++){ // cout<<"!"<<k<<" "<<n-k*m+2*k<<" "<<2*k<<" "; ll res=jc[n-k*m+2*k]*ny[n-k*m]%M*ny[2*k]%M;//cout<<res<<endl; ll forb; if(n-k*m<k)forb=0; else {forb=jc[n-k*m+k]*ny[n-k*m-k]%M*ny[2*k]%M;} // cout<<forb<<endl; ans+=(res-forb+M)%M;ans%=M; } printf("%lld\n",ans); } return 0; }