NC207093. 数列统计
描述
输入描述
第一行一个正整数,表示数据组数。
对于每组数据:两个用空格隔开的整数。
输出描述
行,每行一个答案。
示例1
输入:
2 2 1 2 3
输出:
1 3
C++14(g++5.4) 解法, 执行用时: 222ms, 内存消耗: 18660K, 提交时间: 2020-06-12 14:05:24
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod = 911451407; const int maxn = 2e6 + 10; ll mul[maxn]; ll q_pow(ll a,ll b) { ll res = 1; while(b) { if(b&1)res = res*a%mod; a = a*a%mod; b>>=1; } return res; } ll C(ll n,ll m) { if(m==0)return 1; return mul[n]*q_pow(mul[n - m]*mul[m]%mod,mod - 2)%mod; } int main() { int T; ll l,x,num,cnt,ans; cin >> T; mul[0] = 1; for(ll i = 1;i < maxn;i++) mul[i] = mul[i - 1]*i%mod; while(T--) { scanf("%lld %lld",&l,&x); cout << C(x + l - 2,l - 1) << endl; } return 0; }
C++(g++ 7.5.0) 解法, 执行用时: 374ms, 内存消耗: 18408K, 提交时间: 2023-04-01 22:08:26
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll f[(int)1e6*2+53]; const ll mod=911451407; ll ksm(ll a,ll b){ ll ans=1; while(b){ if(b&1){ans=(ans*a)%mod;} b>>=1;a=(a*a)%mod; } return ans; } int main(){ int t,l,x; f[0]=1; for(int i=1;i<=1e6*2+3;i++){ f[i]=f[i-1]*i; f[i]%=mod; } cin>>t; while(t--){ cin>>l>>x; cout<<f[x+l-2]*ksm(f[l-1],mod-2)%mod*ksm(f[x-1],mod-2)%mod<<"\n"; } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 176ms, 内存消耗: 32748K, 提交时间: 2020-06-05 20:21:19
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e6+5; const int mod=911451407; ll f[N],invf[N]; ll C(ll n,ll m) { return f[n]*invf[n-m]%mod*invf[m]%mod; } int main() { f[0]=f[1]=invf[0]=invf[1]=1; for(int i=2;i<N;i++)f[i]=f[i-1]*i%mod,invf[i]=(mod-mod/i)*invf[mod%i]%mod; for(int i=2;i<N;i++)invf[i]=invf[i]*invf[i-1]%mod; int t;scanf("%d",&t); while(t--) { int l,x;scanf("%d%d",&l,&x); printf("%lld\n",C(l-1+x-1,x-1)); } }