bzoj 4870: [Shoi2017]组合数问题
Description
Solution
考虑这个式子的组合意义:
从 \(n*k\) 个球中取若干个球,使得球的数量 \(\%k=r\) 的方案数
可以转化为 \(DP\) 模型,设 \(f[i][j]\) 表示前 \(i\) 个步,取得球的数量 \(\%k=j\) 的方案数
\(f[i][j]=f[i-1][j]+f[i-1][j-1]\)
发现这个东西就是杨辉三角(胡话,此题无关)
这样就可以做 \(O(k^3log)\) 了,并且可以过了
网上还有一种做法:
设 \(f[i*2][a+b]=\sum f[i][a]*f[i][b]\)
然后矩阵就变成了一个行向量了,复杂度优化成了 \(O(k^2log)\)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=51;
int mod,k,r;ll n;
struct mat{
int a[N];
mat(){memset(a,0,sizeof(a));}
inline mat operator *(const mat &p){
mat ret;
for(int i=0;i<k;i++)
for(int j=0;j<k;j++)
ret.a[(i+j)%k]=(ret.a[(i+j)%k]+1ll*a[i]*p.a[j])%mod;
return ret;
}
}S,T;
inline int qm(int x,int k){
ll sum=1;
while(k){
if(k&1)sum=1ll*x*sum%mod;
x=1ll*x*x%mod;k>>=1;
}return sum;
}
int main(){
freopen("pp.in","r",stdin);
freopen("pp.out","w",stdout);
cin>>n>>mod>>k>>r;
if(k==1)printf("%d\n",qm(2,n)),exit(0);
S.a[0]=1;S.a[1]=1;T=S;
n=n*k-1;
while(n){
if(n&1)S=S*T;
T=T*T;n>>=1;
}
printf("%d\n",S.a[r]);
return 0;
}
bzoj 4870: [Shoi2017]组合数问题的更多相关文章
- bzoj 4870: [Shoi2017]组合数问题 [矩阵乘法优化dp]
4870: [Shoi2017]组合数问题 题意:求 \[ \sum_{i=0}^{n-1} \binom{nk}{ik+r} \mod p \] \(n \le 10^9, 0\le r < ...
- BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法
注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include ...
- BZOJ 4870: [Shoi2017]组合数问题 矩阵乘法_递推
Code: #include <cstdio> #include <cstring> #include <algorithm> #define setIO(s) f ...
- bzoj P4870: [Shoi2017]组合数问题——solution
题意:求解—— $$(C^{r}_{nk}+C^{r+k}_{nk}+C^{r+2k}_{nk}+...+C^{r+(n-1)k}_{nk}+...)mod(P)$$ 其中$C^{m}_{n}$表示从 ...
- BZOJ4870: [Shoi2017]组合数问题
4870: [Shoi2017]组合数问题 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ...
- [BZOJ4870][Shoi2017]组合数问题 dp+矩阵乘
4870: [Shoi2017]组合数问题 Time Limit: 10 Sec Memory Limit: 512 MB Description Input 第一行有四个整数 n, p, k, r ...
- BZOJ_4870_[Shoi2017]组合数问题_矩阵乘法
BZOJ_4870_[Shoi2017]组合数问题_矩阵乘法 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ ...
- [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅
[LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅 题意 比较复杂放LOJ题面好了qaq... Kiana 最近喜欢到一家非常美味的寿司餐厅用餐. 每天晚上,这家餐厅都会按顺序提供 ...
- 【BZOJ4870】[Shoi2017]组合数问题 动态规划(矩阵乘法)
[BZOJ4870][Shoi2017]组合数问题 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < ...
随机推荐
- 学号:201621123032 《Java程序设计》第7周学习总结
1:本周学习总结 1.1:思维导图:Java图形界面总结 2:书面作业 2.1: GUI中的事件处理 2.1.1: 写出事件处理模型中最重要的几个关键词 事件:如鼠标单击,滑动,输入汉字等. 事件源: ...
- 2017-2018-1 我爱学Java 第八周 作业
团队六七周作业 团队分工 UML图 工具选择 小编(金立清)有话说 参考资料 团队分工 返回目录 UML图 用例图 类图 活动图 状态图 返回目录 工具选择 ProcessOn - 免费在线作图,实时 ...
- codves 3044 矩形面积求并
codves 3044 矩形面积求并 题目等级 : 钻石 Diamond 题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Desc ...
- 数据结构-线性表的链式存储相关算法(C语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
- Web移动端适配总结
移动端适配的相关概念以及几种方案总结 适配相关概念 布局视口(layout viewport):html元素的上一级容器即顶级容器,用于解决页面在手机上显示的问题.大部分移动设备都将这个视口分辨率设置 ...
- angluarjs2入门学习资源
http://www.runoob.com/angularjs2/angularjs2-tutorial.htmlhttps://segmentfault.com/a/1190000008423981 ...
- 新概念英语(1-13)A new dress
What colour is Anna's hat? A:What colour is your new dress? B:It's green.Come upstairs and see it. A ...
- window.open()参数详解及对浏览器的兼容性
因为篇幅,window.open()浏览器的兼容性请点击 这里 Part1:参数详解 window.open(url,name,param) url:即将打开的子窗口的地址:比如 "http ...
- Linux网络配置(setup)
新装的Linux系统,想要快捷的网络配置,首选setup命令. 1.设置setup为中文. echo LANG="zh_CN.UTF-8" > /etc/sysconfig/ ...
- Python学习之条件判断和循环
#coding= utf-8 # 条件判断和循环 # 如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做 age1 = 20 if age1 >= 18: prin ...