Codeforces 300 C Beautiful Numbers (Locas)
来源:互联网 发布:在手机淘宝上开店步骤 编辑:程序博客网 时间:2024/04/28 18:18
思路:首先注意到对于长度为N的数字,他各个位数相加最多不会超过b*n,那么就可以枚举小于等于b*n中由a和b组成的good数gnum,设a*x+b*y=gnum,x和y为所求n位数中a的个数和b的个数,并且x+y=n这样,就可以解得x=(m-b*n)/(a-b).只要有正整数解,就说明存在n位数good数字使得他的各个位数之和等于gnum,也就是说由x个a核y个b组成的数字都是excellent数,于是每次ans=(ans+C(n,x)%mod)%mod。gnum可以用深搜枚举,到这里都还会,之后就是和高数轮的同学讨论了,因为C(n,m)%mod涉及到Locas。
对于Locas求的是C(n,m)%p,p是素数,且n,m比较大的时候。
具体可以看这篇:http://blog.csdn.net/acdreamers/article/details/8037918
这里还有一个优化 a/b(mod p)=a%p/(b%p)=a*b^(p-2)(mod p),这样n!/((n-m)!*(m!))%mod=(n!)%mod*(((m-n)!%mod*(m!)%mod)^(mod-2))。在上面的博客中也有写
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <ctime>using namespace std;#define LL long longconst int maxn=1000001;const int mod=1000000007;LL a,b,n,x,y;LL sum=0;LL p[maxn];LL quickpow(LL a,LL b){ LL res=1; while(b>0) { if(b&1) res=(res*a)%mod; b>>=1; a=(a*a)%mod; } return res;}LL C(LL n,LL m){ if(m>n) return 0; return (p[n]*quickpow((p[n-m]*p[m])%mod,mod-2))%mod;}LL Locas(LL n,LL m){ if(m==0) return 1; return (C(n%mod,m%mod)*Locas(n/mod,m/mod))%mod;}void dfs(int num){ if(num>b*n) return; if(num) { x=num-b*n; if(x%(a-b)==0) { x/=(a-b); sum=(sum+Locas(n,x))%mod; } } dfs(num*10+a); dfs(num*10+b);}int main(){ cin>>a>>b>>n; p[0]=p[1]=1; for(LL i=2; i<=n; i++) p[i]=(p[i-1]*i)%mod; sum=0; dfs(0); cout<<sum<<endl; return 0;}
- Codeforces 300 C Beautiful Numbers (Locas)
- CodeForces 300C Beautiful Numbers 组合数取余
- Codeforces 300C Beautiful Numbers 【组合数学】
- CodeForces 300C C. Beautiful Numbers (数论 + 逆元 + 详解)
- Codeforces 300C Beautiful Numbers 乘法逆元
- Codeforces 300C Beautiful Numbers lucas求组合数逆元
- Codeforces 300C Beautiful Numbers 组合数取模+暴力
- codeforces Beautiful Numbers
- Beautiful numbers CodeForces
- Beautiful numbers CodeForces
- Beautiful numbers CodeForces
- CodeForces 300C Beautiful Numbers(乘法逆元/费马小定理+组合数公式+快速幂)
- Codeforces Round #181 (Div. 2)---C. Beautiful Numbers
- CF 300C - Beautiful Numbers [组合数求模]
- C. Beautiful Numbers
- codeforces 55D Beautiful numbers
- CodeForces 55D Beautiful numbers
- Codeforces 55D Beautiful numbers
- 黑马第二天总结
- Map类型
- overflow:hidden line
- 海康 网络摄像头 多摄像头数据传输及流解码
- SecureCRT 显示中文的方法
- Codeforces 300 C Beautiful Numbers (Locas)
- head 方法比对讲解
- Qt教程一 —— 共十四步
- 工厂方法(Factory Method)之追根究底
- cocos2d实现画笔功能及常用的绘制函数
- Jquery插件珍藏
- 以查找表取代switch...case
- android.view.ViewRoot$CalledFromWrongThreadException 异常的解决方案
- Z26上的仿射密码体制