4338: BJOI2015 糖果
4338: BJOI2015 糖果
Time Limit: 2 Sec Memory Limit: 256 MB
Submit: 141 Solved: 66
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 3 3 10
【样例输入2】
2 2 2 10
Sample Output
0
【样例输出2】
6
HINT
Source
[Submit][Status][Discuss]
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<bitset>
using namespace std;const int maxn = 1E5 + 10;
typedef long long LL;LL N,M,K,P,r1,a1,fac[maxn],inv[maxn];
int tot,pri[maxn];
bool not_pri[maxn];void Extend_Gcd(LL a,LL &x,LL b,LL &y)
{if (!b) {x = 1; y = 0; return;}Extend_Gcd(b,y,a%b,x); y -= x*(a/b);
}LL C(int n,int m,LL g)
{if (m > n) return 0;LL Inv = inv[m]*inv[n-m]%g;return fac[n]*Inv%g;
}LL Lucas(LL n,LL m,LL g)
{if (!m) return 1;return Lucas(n/g,m/g,g)*C(n%g,m%g,g)%g;
}LL ksm(LL x,int y,LL g)
{LL ret = 1;for (; y; y >>= 1){if (y&1) ret = ret*x%g;x = x*x%g;}return ret;
}void Work(LL a2)
{LL sum = 1,r2 = 1;if (a2 < maxn){fac[0] = 1;for (LL i = 1; i < a2; i++) fac[i] = fac[i-1]*i%a2;inv[a2-1] = ksm(fac[a2-1],a2-2,a2);for (LL i = a2-2; i >= 0; i--) inv[i] = inv[i+1]*(i+1)%a2;sum = Lucas(K + M - 1,M,a2);}else{for (LL i = 1; i <= M; i++){sum = sum*(K + M - i)%a2; LL x,y; Extend_Gcd(i,x,a2,y);sum = sum*x%a2;}}for (int i = 0; i < N; i++) r2 = r2*(sum-i)%a2;r2 = (r2 + a2) % a2;if (!a1) {r1 = r2; a1 = a2; return;}LL x,y,k1,g; Extend_Gcd(a1,x,a2,y);k1 = (r2 - r1)*x%a2; k1 = (k1 + a2) % a2;g = a1*a2; r1 = (k1*a1%g + r1) % g; a1 = g;
}int main()
{#ifdef DMCfreopen("DMC.txt","r",stdin);#endiffor (int i = 2; i < maxn; i++){if (!not_pri[i]) pri[++tot] = i;for (int j = 1; j <= tot; j++){int Nex = i*pri[j];if (Nex >= maxn) break;not_pri[Nex] = 1;if (i % pri[j] == 0) break;}}cin >> N >> M >> K >> P; int _P = P;for (int i = 1; i <= tot; i++){if (_P % pri[i] != 0) continue;while (_P % pri[i] == 0) _P /= pri[i];Work(pri[i]);}if (_P > 1) Work(_P);cout << r1;return 0;
}
4338: BJOI2015 糖果相关推荐
- bzoj 4338[BJOI2015] 糖果 - 组合
4338: BJOI2015 糖果 Time Limit: 2 Sec Memory Limit: 256 MB Description Alice 正在教她的弟弟 Bob 学数学. 每天,Ali ...
- bzoj 4338: BJOI2015 糖果
4338: BJOI2015 糖果 Time Limit: 2 Sec Memory Limit: 256 MB Submit: 200 Solved: 93 [Submit][Status][D ...
- BZOJ 4338 BJOI2015 糖果
此题其实没什么营养就提示了 , 简单推一个公式 , 再上中国剩余定理即可. PnCmm+k−1 P_{C_{m+k-1}^{m}}^{\,n} 其中p<script type="mat ...
- [BZOJ4338][BJOI2015]糖果(扩展Lucas)
先求出式子$P_{C_{K+m-1}^{m}}^{n}$,然后对于排列直接$O(n)$求解,对于组合用扩展Lucas求解. 但这题数据并没有保证任何一个模数的质因子的$p^k$在可线性处理的范围内,于 ...
- BZOJ 4338 糖果(扩展Lucas定理+CRT)
题目链接:BZOJ 4338 题目大意:用数字1~k填一个n*m的表格,每种数字可用任意次,要求每行数字1~m列单调不减,任意两行不完全相同,求方案数对P取模的值. 题解:扩展Lucas+CRT模板题 ...
- 2017.10.6 BJOI2015 bzoj4338 糖果
糖果 题目背景: bzoj4338 分析:组合数 呜呜呜,为什么你们都推的出组合数······ 本废喵死都没有推出组合数······ 所以我们来详细考虑下这道题目: 首先,我们可以知道,如果我们求出填 ...
- LeetCode简单题之公平的糖果交换
题目 爱丽丝和鲍勃拥有不同总数量的糖果.给你两个数组 aliceSizes 和 bobSizes ,aliceSizes[i] 是爱丽丝拥有的第 i 盒糖果中的糖果数量,bobSizes[j] 是鲍勃 ...
- LeetCode简单题之打折购买糖果的最小开销
题目 一家商店正在打折销售糖果.每购买 两个 糖果,商店会 免费 送一个糖果. 免费送的糖果唯一的限制是:它的价格需要小于等于购买的两个糖果价格的 较小值 . 比方说,总共有 4 个糖果,价格分别为 ...
- LeetCode简单题之分糖果 II
题目 排排坐,分糖果. 我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友. 给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小 ...
最新文章
- ASP.NET2.0 文本编辑器FCKeditor的冰冷之心 【月儿原创】
- 实验2 使用T-SQL编写程序
- 巴克码matlab,matlab编写巴克码
- cs架构使用webservice靠谱嘛_使用点评eimele亦餐哪些味道的好吃?口碑靠谱吗?急想知道!...
- T-SQL编程基础-基本语法
- Android --- ERROR: Failed to resolve: xxx Affected Modules: xxx
- linux上安装fio教程,fio工具安装及使用
- 再见,Spark!Flink已成气候!
- 循环不变式(loop invariant)
- android 知识点大全 面试
- C语言编程齿轮轮廓线坐标,c语言程序实现齿轮基本参数几何尺寸计算.pdf
- CIF,4CIF,QCIF,D1
- open SUSE 查看本机ip地址
- 东营网站服务器部署,联通东营服务器dns地址
- 【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )
- tomcat运行后报错“Address localhost:1099 is already in use”
- oracle中栓锁,特定的闩锁和互斥场景
- 解决D-LINK DI 504路由器上网掉线问题
- WARNING: [Labtools 27-3413] vivado报错调试界面无信号无波形解决方法
- 基于IO多路复用的TCP客户端