当前位置: 首页 > news >正文

网站建设mfdos 优帮云外国设计师素材网站

网站建设mfdos 优帮云,外国设计师素材网站,学软件工程可以从事什么工作,灰色行业做网站题解前的BB 题目居然用漫作为题目背景,题目中那神说的话不符合语法,我也是醉了。 题目大意 给出 n,m(0≤n≤1018,1≤m≤100) ,有序列 a1,a2,a3...ak−1,ak 满足这些数的和是n,且每个数模m后的结果互不相同,求这样的…

题解前的BB
题目居然用漫作为题目背景,题目中那神说的话不符合语法,我也是醉了。

题目大意
给出 n,m(0n1018,1m100) ,有序列 a1,a2,a3...ak1,ak 满足这些数的和是n,且每个数模m后的结果互不相同,求这样的序列的个数,结果模905229641。

我们先来学习一些必备的东西。

放小球问题
现在我们来考虑一类特殊的问题:现在有a个球,要将其分成b组,每组至少有一个球,求方案数。
我们把 a 个球摊开后,题目就变成,要在a个格子之间放b-1个隔板(即在a1个空隙中放入 b1 隔板),使其分成b组,那么这样的组合数就为 Cb1a1

这个问题再升级一下就变成:现在有 a 个球,要将其分成b组,每组可以没有球,求方案数。
这样的解法其实是类似的。
考虑一个合法的方案,在每一组里都加入一个球,则每一组都有至少一个球,就得球的个数就变成了 a+b 个,题目就变成了:有 a+b 个球,要将其分成b组,每组至少有一个球,求方案数。则由上面一个问题的结论得出,这个问题的答案即为 Cb1a+b1

逆元
大家都知道倒数吧, 1x x 的倒数,那么在模意义下的倒数即为逆元,即如果满足x×x1(modp),那么 k 就是x的逆元,
由费马小定理:当 x p互质时, xp11(modp)
x×xp21(modp)
又因为 x×x1(modp)
那么 xxp2(modp)
x 的逆元为xp2

思路
一个很直观的想法是设 fx,y 表示这个序列的数的和是x,有y个模m后结果不同的数的方案数,显然转移伪代码为

t=0 -> m-1k=0 -> nif k%t==0x=n -> 0y=1 -> mf[x][y]=f[x][y]+f[x-k][y-1];

算出 f 数组后直接统计答案就好了。
然而,这样的时间复杂度是O(n2m2),显然很暴力,空间也很大。
这个方程是可以优化的!!!,设 fx,y 表示这个序列的数模m后的和为x,有y个模m后结果不同的数的方案数,这样的话,转移就变成了

t=0 -> m-1x=m*(m-1)/2 -> 0y=1 -> mf[x][y]=f[x][y]+f[x-t][y-1];

这样的时间复杂度就变成了 O(m4) ,时限一秒,可以过。但是,还没有完,我们还要求答案。

回归题目
前面我们已经预处理出了 f 数组,然后在于处理出jsi表示 i 的阶乘。设有序列b1,b2...bk满足 b 序列的数互不相同且都小于m,求答案的具体思路就是枚举b序列的和 t ,显然我们可以得出还需给任意一些b序列里的数加上共 ((nt)÷m) 个m,就能使 b 序列成为一个合法的a序列,设 x=(nt)÷m ,再枚举 b 序列的长度len,那么再由前面讨论出的特殊问题的结论(看到这里读者也许忘了,就是将a个球分成b组,每组可以没有球的方案数为 Cb1a+b1 ),答案就为 ft,lenjslenClen1x+len1 的和
看到这儿,是不是觉得这就是正解,小心脏就兴奋了?快要炸开了?太天真了。
由数据范围 (0n1018) x 的值可能很大,所以组合数不可以直接预处理,怎么办?因为len是从1到m枚举的,所以当 len=1 时,组合数的值为1,于是我们可以一个一个转移组合数的值。
当我们从 Clen1x+len1 转移到 Clenx+len 时,实际上, Clenx+len=Clen1x+len1×x+lenlen
因为有模,所以要用逆元,所以
Clenx+lenClen1x+len1×(x+len)×lenp2(modp)
于是就可以完美解决了,除预处理外时间复杂度 O(m3)

下面附一下代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<numeric>
#include<cstring>
#include<queue>
#include<functional>
#include<set>
#include<map>#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)typedef long long LL;
const int mod = 905229641;
const int M = 110;using namespace std;LL n;
LL m,f[M][M*M],ans,js[M];void prepare(){f[0][0]=1;fo(i,0,m-1)fd(x,i,0)fo(y,0,m*(m-1)/2-i)if (f[x][y])f[x+1][y+i]=(f[x][y]+f[x+1][y+i])%mod;js[1]=1;fo(i,2,m)js[i]=js[i-1]*i%mod;
}LL quickmi(LL x,int tim){LL ans=1;while (tim){if (tim%2==1)ans=(ans*x)%mod;x=(x*x)%mod;tim/=2;}return ans;
}void getans(){ans=0;fo(i,0,m*(m-1)/2)if ((n-i)%m==0){LL x=((n-i)/m)%mod;LL tot=1;fo(j,1,m){ans=(ans+f[j][i]*js[j]%mod*tot%mod)%mod;tot=(tot*(x+j)%mod*quickmi(j,mod-2)%mod)%mod;}   }
}int main(){scanf("%lld%d",&n,&m);prepare();getans();printf("%lld\n",ans);
}
http://www.yayakq.cn/news/442145/

相关文章:

  • 黄冈市建设局官方网站拼多多代运营一般多少钱
  • dede如何手机网站和电脑网站的数据同步更新俄罗斯局势最新消息
  • 奉贤网站建设推广医院网站开发兼职
  • seo最好的网站包做包装的网站
  • 如何宣传自己的网站网站主机推荐
  • 做简历的网站有哪些内容网站建设开拓该行业的难点疑
  • 做公司网站的模板下载大学生创新创业点子
  • 网站如何买空间优化方案英语选择性必修二答案
  • wordpress密码无法重置密码四川新站优化
  • 网站建设廴金手指花总壹柒查公司注册信息怎么查
  • 衡水网站设计哪家专业济南网站建设方案案例展示
  • 如何提升网站alexa排名电子商务网站有哪些
  • 如何通过建设网站赚钱怎么做淘宝一样的网站
  • 建设网站账务处理安微网站建设
  • 企业网站建设需要注意什么建公司的步骤
  • 做网站怎样实现网上支付德州app开发公司
  • 哪些网站做的比较好电子商务营销方案
  • 如何做网站导航怎么用vue写wordpress主题
  • 微博上如何做网站推广资源网站优化排名优化
  • 求一个网站比较大的建站公司
  • 北京网站建设知名公司排名网站工程师平均工资
  • 最好的开发网站建设价格seo蒙牛伊利企业网站专业性诊断
  • 优秀个人网站案例北京市建筑信息公开平台
  • 电脑购物网站模板wordpress 前端发帖
  • 马鞍山建设银行网站网站开发海口
  • 网站建设天乐大厦网站建设三网合一指的是什么意思
  • 建站导航wordpress偽靜態
  • 做一个京东网站怎么做网站关键字让别人做超链接了怎么办
  • seo网站推广seo小满crm外贸系统
  • 网站做产品的审核工作怎么样模版大全