[题目链接]

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] 组合数问题相关推荐

  1. P3746 [六省联考 2017] 组合数问题(倍增、dp)

    解析 再次被"组合数问题"吊打qwq 和上一次不一样的是,这次更加被恶心到了. 一方面受上一个组合数问题影响,另外出题人也十分阴间,一开始还给了个组合数的公式,更加使我坚定的认为这 ...

  2. [六省联考2017]组合数问题

    题目大意:求这个式子: ∑i=0∞Cik+rnk(modp) 这道题就是个数学题,做法其实就是优化的暴力--杨辉三角矩阵加速. 可以加速的原理,其实就是杨辉三角是一个一维递推,并且可以将递推描述为:复 ...

  3. [SHOI 2017] 分手是祝愿

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4872 [算法] 首先发现 , 对于一个开关 , 按下2次和没按是等价的 , 因此每个 ...

  4. SHOI 2017 相逢是问候

    LOJ 2142 相逢是问候 这道题真的长见识 首先 这道题目很轻易地就能想到用 线段树 求和 但是题目的难点在于 caimodp≠caimodpmodpc^{a_i}\mod p \neq c^{a ...

  5. 数论四之综合训练——Magic Pairs,Crime Management,Top Secret,组合数问题

    数论综合训练 Magic Pairs problem solution code CF107D Crime Management problem solution code UVA12183 Top ...

  6. 六省联考2017 Day1

    目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...

  7. HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  8. 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 ...

  9. 2017.4.26 组合数问题 思考记录

    这个题和其他前缀和的题相比实在太直白了. 然而考场上并不会二维前缀和.... 注意判断的时候要加上j<i就行了. 码: #include<iostream> #include< ...

最新文章

  1. org.springframework.data.redis 一次连接获取特定key所有k-v(pipeline)
  2. MongoDB最简单的入门教程之二 使用nodejs访问MongoDB
  3. 二进制全排列 java_排列组合算法真厉害,傻瓜都能学会
  4. P3216-[HNOI2011]数学作业【矩阵乘法,数学】
  5. 慕课乐学python单元测试答案_中国大学慕课第三章单元测试答案_乐学软件工程免费答案...
  6. 组合数学基本工具-- 排列与组合以及简单公式
  7. 基于c++11新标准开发一个支持多线程高并发的网络库
  8. Python机器学习:梯度下降法004实现线性回归中的梯度下降法
  9. self、 superclass 、 super的区别
  10. 入驻蚂蚁金服财富号的基金公司,学“乖”了
  11. MOV 和MOVS 这两条指令有什么区别?
  12. snipaste_截图神器
  13. 【前端】html+css实现鼠标悬浮变色的按钮 hover【HTML+CSS+JavaScript(JS)】
  14. vue 统计中英文字符串长度_计算字符串长度以及截取字符串长度(英文占1个字符,中文汉字占2个字符)...
  15. 学phyton第二天
  16. 复习Java第一个项目学生信息管理系统 04(权限管理和动态挂菜单功能) python简单爬数据实例Java面试题三次握手和四次挥手生活【记录一个咸鱼大学生三个月的奋进生活】016
  17. 2. RabbitMQ 的基本使用
  18. git 报错:remote: Not Found fatal: repository ‘http://xxx/xxx.git/‘ not found
  19. 搭建自己的NAS 系统
  20. MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB

热门文章

  1. 使用python的requests+bs4 实现京东的手机商品数据收集
  2. 新网银行年营收26亿:净利9亿 远逊色于微众与网商银行
  3. 27. Green Building 绿色建筑
  4. 样本估计量的有偏估计和无偏估计
  5. matlab 字符串的比较,MATLAB字符串比较总结
  6. 12秒88---刘翔破世界记录
  7. 每日一题 错选择 及 编程题 周总结(四)
  8. jdbc连接常用url格式
  9. 服务器的运行寿命一般有多久?服务器怎么选?
  10. 记双系统 ubuntu18.04 无线网卡驱动安装