BZOJ3738 [Ontak2013]Kapitał 【扩展Lucas】
题目链接
题解
复习
同上
但是为了消去因子\(10\),处理\(2^k\)的时候,乘回\(2^{k_1}\)时,应同时计算\(5^{k_2}\)
如果\(k_1 \ge k_2\),乘上\(5^{k_2}\)的逆元
如果\(k_1 < k_2\),乘上\(5^{k_1}\)的逆元
处理\(5^k\)的时候同理
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<map>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define cls(s,v) memset(s,v,sizeof(s))
#define mp(a,b) make_pair<int,int>(a,b)
#define cp pair<int,int>
using namespace std;
const int maxn = 2000005,maxm = 100005,INF = 0x3f3f3f3f;
LL pr[2],pk[2],fac[2],P,k1,k2,now;
inline LL qpow(LL a,LL b,LL p){
LL re = 1;
for (; b; b >>= 1,a = 1ll * a * a % p)
if (b & 1) re = 1ll * re * a % p;
return re;
}
inline void exgcd(LL a,LL b,LL&d ,LL& x,LL& y){
if (!b){d = a; x = 1; y = 0;}
else exgcd(b,a % b,d,y,x),y -= (a / b) * x;
}
inline LL inv(LL n,LL p){
LL d,x,y; exgcd(n,p,d,x,y);
return (x % p + p) % p;
}
inline LL Fac(LL n,LL P,LL p){
if (!n) return 1;
LL ans = 1;
if (n / P) ans = qpow(fac[now],n / P,P);
LL E = n % P;
for (LL i = 2; i <= E; i++)
if (i % p) ans = 1ll * ans * i % P;
return 1ll * ans * Fac(n / p,P,p) % P;
}
inline int C(LL n,LL m,int pk,int p){
now = (p == 5);
LL a = Fac(n,pk,p),b = Fac(m,pk,p),c = Fac(n - m,pk,p),ans;
ans = 1ll * a * inv(b,pk) % pk * inv(c,pk) % pk;
if (p == 2){
if (k1 >= k2)
ans = 1ll * ans * qpow(inv(5,pk),k2,pk) % pk * qpow(2,k1 - k2,pk) % pk;
else ans = 1ll * ans * qpow(inv(5,pk),k1,pk) % pk;
}
else {
if (k1 >= k2)
ans = 1ll * ans * qpow(inv(2,pk),k2,pk) % pk;
else ans = 1ll * ans * qpow(inv(2,pk),k1,pk) % pk * qpow(5,k2 - k1,pk) % pk;
}
return 1ll * ans * (P / pk) % P * inv(P / pk,pk) % P;
}
inline LL exlucas(LL n,LL m){
for (LL i = n; i; i /= 2) k1 += i / 2;
for (LL i = m; i; i /= 2) k1 -= i / 2;
for (LL i = n - m; i; i /= 2) k1 -= i / 2;
for (LL i = n; i; i /= 5) k2 += i / 5;
for (LL i = m; i; i /= 5) k2 -= i / 5;
for (LL i = n - m; i; i /= 5) k2 -= i / 5;
LL re = 0;
re = (re + C(n,m,pk[0],pr[0])) % P;
re = (re + C(n,m,pk[1],pr[1])) % P;
return re;
}
int main(){
LL N,M,K;
cin >> N >> M >> K;
pr[0] = 2; pr[1] = 5; pk[0] = pk[1] = P = 1;
REP(i,K) pk[0] *= 2,pk[1] *= 5,P *= 10;
fac[0] = 1; for (LL i = 2; i < pk[0]; i++) if (i % 2) fac[0] = 1ll * fac[0] * i % pk[0];
fac[1] = 1; for (LL i = 2; i < pk[1]; i++) if (i % 5) fac[1] = 1ll * fac[1] * i % pk[1];
cout << setfill('0') << setw(K) << exlucas(N + M,N) << endl;
return 0;
}
BZOJ3738 [Ontak2013]Kapitał 【扩展Lucas】的更多相关文章
- BZOJ3738 : [Ontak2013]Kapitał
$C_{N+M}^N=\frac{(N+M)!}{N!M!}$ 考虑求出$ans\bmod 10^9$的值 $10^9=2^9\times5^9$ 以$2^9$为例,先预处理出$1$..$2^9$中不 ...
- bzoj 4830: [Hnoi2017]抛硬币 [范德蒙德卷积 扩展lucas]
4830: [Hnoi2017]抛硬币 题意:A投a次硬币,B投b次硬币,a比b正面朝上次数多的方案数,模\(10^k\). \(b \le a \le b+10000 \le 10^{15}, k ...
- 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)
J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- BZOJ_2142_礼物_扩展lucas+组合数取模+CRT
BZOJ_2142_礼物_扩展lucas+组合数取模 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同 ...
- 扩展CRT +扩展LUCAS
再次感谢zyf2000超强的讲解. 扩展CRT其实就是爆推式子,然后一路合并,只是最后一个式子上我有点小疑惑,但整体还算好理解. #include<iostream> #include&l ...
- BZOJ3129 SDOI2013方程(容斥原理+扩展lucas)
没有限制的话算一个组合数就好了.对于不小于某个数的限制可以直接减掉,而不大于某个数的限制很容易想到容斥,枚举哪些超过限制即可. 一般情况下n.m.p都是1e9级别的组合数没办法算.不过可以发现模数已经 ...
- Codeforces.100633J.Ceizenpok's formula(扩展Lucas)
题目链接 ->扩展Lucas //求C_n^k%m #include <cstdio> typedef long long LL; LL FP(LL x,LL k,LL p) { L ...
- P2467 [SDOI2010]地精部落 (dp+组合数)【扩展Lucas好难不会】
题目链接:传送门 题目: 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其 ...
- 【learning】 扩展lucas定理
首先说下啥是lucas定理: $\binom n m \equiv \binom {n\%P} {m\%P} \times \binom{n/P}{m/P} \pmod P$ 借助这个定理,求$\bi ...
随机推荐
- (.DS_Store)避免多人提交代码到GitHub上起冲突
在多人合作的项目里,git pull origin master执行完之后出现以下问题: Auto-merging .DS_Store CONFLICT (content): Merge confli ...
- 1.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——手册页
我们运行的命令行程序,通常在技术上称作shell, 它包含了一个非常强大(也很神秘)的工具,我们将用它来学习更多可用的命令.这个工具本身就是个称作'man'的命令('manual'的简写).它的参数是 ...
- 20155211 网络对抗 Exp9 Web安全基础实践
20155211 网络对抗 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语 ...
- Exp7:网络欺诈防范
Exp7:网络欺诈防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击? 答:同一局域网下,以及各种公共网络. 在日常生活工作中如何防范以上两攻击方法? 答: 使用最新版本的DNS服务器 ...
- 20155307《网络对抗》Web安全基础实践
20155307<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...
- 基于RapidJSON的操作库
需要安装配置RapidJSON库 /******************************************************************* * summery: 提供便 ...
- 验证Xpath和CSS 路径是否有效
XPath定位和CSS定位在Selenium中是经常使用的. 在FireFox浏览器和Chrome浏览器,可以使用这样的方法来验证定位是否准确. 以Chrome浏览器做范例 按键盘的F12 进入开发者 ...
- idou老师教你学istio :基于角色的访问控制
istio的授权功能,也称为基于角色的访问控制(RBAC),它为istio服务网格中的服务提供命名空间级别.服务级别和方法级别的访问控制.基于角色的访问控制具有简单易用.灵活和高性能等特性.本文介绍如 ...
- 01-docker简介
如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...
- YQCB冲刺第二周第五天
今天的任务为实现由用户设置每月初始额度的功能. 昨天的任务为实现精准查账的功能. 遇到的问题为界面的布局以及精准查账按什么标准查找,最后决定按分类查账与时间查账相结合. 站立会议 任务面板