loj #2038. 「SHOI2015」超能粒子炮・改(组合数学)
来源:互联网 发布:移动的网络机顶盒 编辑:程序博客网 时间:2024/05/23 12:09
题目链接:https://loj.ac/problem/2038
推个柿子,根据Lucas定理可得:
然后S可以预处理出2333以下的部分,递归去求解就好了,组合数可以Lucas定理来求。
代码:
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MOD=2333;ll sum[2335][2335];ll qpow(ll x,ll k){int res=1;while(k){if(k&1)res=res*x%MOD;x=x*x%MOD;k>>=1;}return res;}ll fact[MOD+10],inv[MOD+10];void init(){fact[0]=1;inv[0]=1;for(int i=1;i<=MOD;i++){fact[i]=fact[i-1]*i%MOD;inv[i]=qpow(fact[i],MOD-2);}}ll Lucas(ll n,ll m){ll a,b,res=1LL;while(n&&m){a=n%MOD,b=m%MOD;if(a<b)return 0LL;res=res*fact[a]%MOD*inv[b]%MOD*inv[a-b]%MOD;n/=MOD,m/=MOD;}return res;}ll cal(ll n,ll k){if(k<MOD&&n<MOD)return sum[n][k];ll ans=0;ans+=Lucas(n/MOD,k/MOD)*sum[n%MOD][k%MOD]%MOD;ans%=MOD;if(k>=MOD)ans+=cal(n/MOD,k/MOD-1)*sum[n%MOD][MOD-1]%MOD;ans%=MOD;return ans;}int main(){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int T;init();for(int i=0;i<MOD;i++){for(int j=0;j<=i;j++){sum[i][j]=Lucas(i,j);}for(int j=1;j<MOD;j++){sum[i][j]+=sum[i][j-1];sum[i][j]%=MOD;}}scanf("%d",&T);while(T--){ll k,n;scanf("%lld%lld",&n,&k);printf("%lld\n",cal(n,k));}return 0;}
阅读全文
0 0
- loj #2038. 「SHOI2015」超能粒子炮・改(组合数学)
- bzoj 4591: [Shoi2015]超能粒子炮·改 Lucas定理+组合数学
- BZOJ4591 [Shoi2015]超能粒子炮·改
- 【bzoj4591】[Shoi2015]超能粒子炮·改
- [BZOJ4591][Shoi2015]超能粒子炮·改
- 4591: [Shoi2015]超能粒子炮·改
- 【BZOJ4591】 SHOI2015 超能粒子炮·改
- 【SHOI2015】bzoj4591 超能粒子炮·改
- BZOJ4591: [Shoi2015]超能粒子炮·改
- 【bzoj4591】【Shoi2015超能粒子炮·改】【lucas定理】
- 【bzoj4591】[Shoi2015]超能粒子炮·改 Lucas定理
- bzoj 4591: [Shoi2015]超能粒子炮·改
- BZOJ4591——[Shoi2015]超能粒子炮·改
- bzoj 4591 [Shoi2015]超能粒子炮·改
- 超能粒子炮·改 HYSBZ
- 超能粒子炮·改 HYSBZ
- BZOJ-4591 超能粒子炮·改(lucas定理+预处理)
- LOJ #2037. 「SHOI2015」脑洞治疗仪
- 左链接 数据变少 sql语句
- js中如何将arguments伪数组转为数组
- 附1.pyton中的range()函数
- 1275:小明A+B(2)
- python文件运行报错: 'NoneType' object has no attribute 'TF_DeleteStatus'
- loj #2038. 「SHOI2015」超能粒子炮・改(组合数学)
- maven运行项目出现编译环境的错误
- dommemstat
- MySQL修改表
- React虚拟DOM浅析
- css3实现hover特效----案例
- java中Serializable与Parcelable的使用
- 顶住学长20分钟的进攻?刚入学就玩这么大?
- Ubuntu提示E: Sub-process /usr/bin/dpkg returned an error code (1)的解决方法