[BZOJ4870][六省联考2017]组合数问题(组合数动规)
4870: [Shoi2017]组合数问题
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 748 Solved: 398
[Submit][Status][Discuss]Description
Input
第一行有四个整数 n, p, k, r,所有整数含义见问题描述。1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1Output
一行一个整数代表答案。Sample Input
2 10007 2 0Sample Output
8HINT
Source
题目实际上是要求所有kn以内的所有模k余r的数的组合数之和。对于这种余数固定的题目常常可以根据余数DP,而根据r,k范围都很小而只有n很大可以初步猜测需要用到矩阵快速幂。
那么我们设$f[i][j]=\sum\limits_{l=0}^{+\infty}C_{i}^{lk+j}$,那么可以得出f[i+j][(x+y)%k]+=f[i][x]*f[j][y]。
这样我们把f[i]看成一个行向量,就可以矩阵乘法了。复杂度$O(k^3 \log n)$
实际上还可以优化,发现f[i]之间的转移有一个非常重要的性质:转移符合交换律!这意味着我们可以直接像快速幂一样进行DP转移。复杂度$O(k^2 \log n)$
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
typedef long long ll;
using namespace std; const int N=100;
ll ans[N],c[N],a[N],n,p,k,r,t; void dp(ll a[],ll b[]){
for (int i=0; i<k; i++) c[i]=0;
for (int i=0; i<k; i++) for (int j=0; j<k; j++)
c[(i+j)%k]=(c[(i+j)%k]+a[i]*b[j]%p)%p;
for (int i=0; i<k; i++) a[i]=c[i];
} int main(){
freopen("bzoj4870.in","r",stdin);
freopen("bzoj4870.out","w",stdout);
scanf("%lld%lld%lld%lld",&n,&p,&k,&r);
ans[0]++; ans[1%k]++; a[0]++; a[1%k]++; t=n*k-1;
while (t>0){
if (t & 1) dp(ans,a);
dp(a,a); t>>=1;
}
printf("%lld\n",ans[r]);
return 0;
}
[BZOJ4870][六省联考2017]组合数问题(组合数动规)的更多相关文章
- bzoj千题计划263:bzoj4870: [六省联考2017]组合数问题
http://www.lydsy.com/JudgeOnline/problem.php?id=4870 80分暴力打的好爽 \(^o^)/~ 预处理杨辉三角 令m=n*k 要求满足m&x== ...
- BZOJ4870 [六省联考2017] 组合数问题 【快速幂】
题目分析: 构造f[nk][r]表示题目中要求的东西.容易发现递推公式f[nk][r]=f[nk-1][r]+f[nk-1][(r-1)%k].矩阵快速幂可以优化,时间复杂度O(k^3logn). 代 ...
- [BZOJ4872][六省联考2017]分手是祝愿(期望DP)
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 516 Solved: 342[Submit][Statu ...
- P3746 [六省联考2017]组合数问题
P3746 [六省联考2017]组合数问题 \(dp_{i,j}\)表示前\(i\)个物品,取的物品模\(k\)等于\(r\),则\(dp_{i,j}=dp_{i-1,(j-1+k)\%k}+dp_{ ...
- 六省联考2017 Day1
目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...
- 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
[BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...
- 【BZOJ4868】[六省联考2017]期末考试(贪心)
[BZOJ4868][六省联考2017]期末考试(贪心) 题面 BZOJ 洛谷 题解 显然最终的答案之和最后一个公布成绩的课程相关. 枚举最后一天的日期,那么维护一下前面有多少天可以向后移,后面总共需 ...
- 六省联考2017 Day2
目录 2018.3.27 Test 总结 T1 T2 T3 BZOJ.4873.[六省联考2017]寿司餐厅(最小割ISAP 最大权闭合子图) 考试代码 T1 T2 T3 2018.3.27 Test ...
- 洛谷 P3747 [六省联考2017]相逢是问候 解题报告
P3747 [六省联考2017]相逢是问候 题目描述 \(\text {Informatik verbindet dich und mich.}\) 信息将你我连结. \(B\) 君希望以维护一个长度 ...
随机推荐
- 2017ACM暑期多校联合训练 - Team 6 1003 HDU 6098 Inversion (模拟)
题目链接 Problem Description Give an array A, the index starts from 1. Now we want to know Bi=maxi∤jAj , ...
- HDU 2593 Pirates’ Code (STL容器)
题目链接 Problem Description Davy Jones has captured another ship and is smiling contently under the sun ...
- Traffic-Server配置(待补充和更新)
Server 5.3.2 测试1.裸盘:remap.configmap http://192.168.227.131 http://192.168.227.131:8080 #traffic_serv ...
- js base64加密解密
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ...
- 1-编程基础及Python环境部署
目录 1 编程基础 1.1 基本概念 1.2 语言分类 1.3 高级语言的发展 2 程序 3 python的语言介绍 4 Python的解释器 5 Python版本区别 6 Python安装 6.1 ...
- Android上HDMI介绍(基于高通平台)
本文重点针对HDMI在android上的应用,而比较相关的就是overlay机制.overlay在这里只是简单的介绍,后续会有文章再专门详述. 我没记错的话,高通从7X30开始,平台就可以支持HDMI ...
- HDU 6187 Destroy Walls (对偶图最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6187 题意:有一个V个结点M条边的带边权无向平面图,有一个人在一个区域,要拆一些墙使得他可以到达任意一 ...
- 浅谈Java中的hashcode方法(转)
原文链接:http://www.cnblogs.com/dolphin0520/p/3681042.html 浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地 ...
- [ python ] 进程的操作
目录 (见右侧目录栏导航)- 1. 前言- 2. multiprocess模块- 2.1 multiprocess.Process模块 - 2.2 使用Process模块创建进程 - 2. ...
- 一张图解AlphaGo原理及弱点
声明:本文转载自(微信公众号:CKDD),作者郑宇 张钧波,仅作学习收录之用,不做商业目的. 近期AlphaGo在人机围棋比赛中连胜李世石3局,体现了人工智能在围棋领域的突破,作为人工智能领域的工作者 ...
.jpg)