[SHOI 2017] 组合数问题
[题目链接]
https://www.lydsy.com/JudgeOnline/problem.php?id=4870
[算法]
回顾组合数的定义 :
C(N , M)表示将N个小球放入M个盒子里的方案数
我们发现题目要求的其实就是将nk个小球放入模k意义下于r个盒子中的方案数
不妨设Fi , j表示放了i个小球 , j个盒子(模k意义下)的方案数
有 : Fi , j = Fi - 1 , j - 1 + Fi - 1 , j
矩阵乘法即可
时间复杂度 : O(K ^ 3logNlogK)
[代码]
#include<bits/stdc++.h> using namespace std; const int N = 1e9 + 10; const int K = 55; typedef long long ll; typedef unsigned long long ull; typedef long double ld;int n , p , k , r; int mat[K][K];template <typename T> inline void chkmax(T &x , T y) { x = max(x , y); } template <typename T> inline void chkmin(T &x , T y) { x = min(x , y); } template <typename T> inline void read(T &x) {T f = 1; x = 0;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0';x *= f; } inline void multipy(int a[K][K] , int b[K][K]) {static int res[K][K];for (int i = 0; i < k; ++i){for (int j = 0; j < k; ++j){res[i][j] = 0;}}for (int x = 0; x < k; ++x){for (int i = 0; i < k; ++i){for (int j = 0; j < k; ++j){res[i][j] = (res[i][j] + 1ll * a[i][x] * b[x][j] % p) % p;}}}for (int i = 0; i < k; ++i){for (int j = 0; j < k; ++j){a[i][j] = res[i][j]; } } } inline void exp_mod(int mat[K][K] , ll n) {static int b[K][K];for (int i = 0; i < k; ++i){for (int j = 0; j < k; ++j){b[i][j] = (i == j);}}while (n > 0){if (n & 1) multipy(b , mat);multipy(mat , mat);n >>= 1;}for (int i = 0; i < k; i++){for (int j = 0; j < k; j++){mat[i][j] = b[i][j];}} }int main() {read(n); read(p); read(k); read(r);for (int i = 0; i < k; ++i) {++mat[i][i]; ++mat[i][((i - 1) % k + k) % k];}exp_mod(mat , (ll)n * k);printf("%d\n" , mat[r][0]);return 0; }
转载于:https://www.cnblogs.com/evenbao/p/10540113.html
[SHOI 2017] 组合数问题相关推荐
- P3746 [六省联考 2017] 组合数问题(倍增、dp)
解析 再次被"组合数问题"吊打qwq 和上一次不一样的是,这次更加被恶心到了. 一方面受上一个组合数问题影响,另外出题人也十分阴间,一开始还给了个组合数的公式,更加使我坚定的认为这 ...
- [六省联考2017]组合数问题
题目大意:求这个式子: ∑i=0∞Cik+rnk(modp) 这道题就是个数学题,做法其实就是优化的暴力--杨辉三角矩阵加速. 可以加速的原理,其实就是杨辉三角是一个一维递推,并且可以将递推描述为:复 ...
- [SHOI 2017] 分手是祝愿
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4872 [算法] 首先发现 , 对于一个开关 , 按下2次和没按是等价的 , 因此每个 ...
- SHOI 2017 相逢是问候
LOJ 2142 相逢是问候 这道题真的长见识 首先 这道题目很轻易地就能想到用 线段树 求和 但是题目的难点在于 caimodp≠caimodpmodpc^{a_i}\mod p \neq c^{a ...
- 数论四之综合训练——Magic Pairs,Crime Management,Top Secret,组合数问题
数论综合训练 Magic Pairs problem solution code CF107D Crime Management problem solution code UVA12183 Top ...
- 六省联考2017 Day1
目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...
- HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 2017 Multi-University Training Contest - Team 7:1010. Just do it(组合数?)
其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...
- 2017.4.26 组合数问题 思考记录
这个题和其他前缀和的题相比实在太直白了. 然而考场上并不会二维前缀和.... 注意判断的时候要加上j<i就行了. 码: #include<iostream> #include< ...
最新文章
- org.springframework.data.redis 一次连接获取特定key所有k-v(pipeline)
- MongoDB最简单的入门教程之二 使用nodejs访问MongoDB
- 二进制全排列 java_排列组合算法真厉害,傻瓜都能学会
- P3216-[HNOI2011]数学作业【矩阵乘法,数学】
- 慕课乐学python单元测试答案_中国大学慕课第三章单元测试答案_乐学软件工程免费答案...
- 组合数学基本工具-- 排列与组合以及简单公式
- 基于c++11新标准开发一个支持多线程高并发的网络库
- Python机器学习:梯度下降法004实现线性回归中的梯度下降法
- self、 superclass 、 super的区别
- 入驻蚂蚁金服财富号的基金公司,学“乖”了
- MOV 和MOVS 这两条指令有什么区别?
- snipaste_截图神器
- 【前端】html+css实现鼠标悬浮变色的按钮 hover【HTML+CSS+JavaScript(JS)】
- vue 统计中英文字符串长度_计算字符串长度以及截取字符串长度(英文占1个字符,中文汉字占2个字符)...
- 学phyton第二天
- 复习Java第一个项目学生信息管理系统 04(权限管理和动态挂菜单功能) python简单爬数据实例Java面试题三次握手和四次挥手生活【记录一个咸鱼大学生三个月的奋进生活】016
- 2. RabbitMQ 的基本使用
- git 报错:remote: Not Found fatal: repository ‘http://xxx/xxx.git/‘ not found
- 搭建自己的NAS 系统
- MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB