BZOJ 4870: [Shoi2017]组合数问题 矩阵乘法_递推
Code:
#include <cstdio>
#include <cstring>
#include <algorithm> #define setIO(s) freopen(s".in","r",stdin)
#define N 60
#define ll long long
#define mod p using namespace std; int k,r;
long long n,p;
struct matrix{
long long mat[N][N];
};
void init(matrix &a){
for(int i=0;i<k;++i)
for(int j=0;j<k;++j) a.mat[i][j]=0;
}
void get(matrix &a){
init(a);
for(int i=0;i<k;++i) a.mat[i][i]=1;
}
matrix operator*(matrix a,matrix b){
matrix c;
init(c);
for(int i=0;i<k;++i)
for(int j=0;j<k;++j)
for(int kk=0;kk<=k;++kk)
c.mat[i][j]=(c.mat[i][j]+(long long)(a.mat[i][kk]*b.mat[kk][j]))%mod;
return c;
}
matrix operator^(matrix a,ll p){
matrix res;
get(res);
while(p>0){
if(p&1) res=res*a;
a=a*a;
p>>=1;
}
return res;
}
int main(){
//setIO("input");
scanf("%lld%lld%d%d",&n,&mod,&k,&r);
matrix ans,a;
init(ans),init(a),ans.mat[0][0]=1;
for (int i=0;i<k;i++)
a.mat[i?i-1:k-1][i]++,a.mat[i][i]++;
n*=k;
ans=ans*(a^n);
printf("%lld\n",ans.mat[0][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 < ...
- HDU 5863 cjj's string game (矩阵乘法优化递推)
题目大意:用k种字符构建两个长度为n的字符串(每种字符有无限多个),要求对应位置字符相同的连续子串最长长度为m,问方法数. 其中k,n,m是输入,n(1<=n<=1000000000), ...
- BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法
注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include ...
- [模板][题解][Luogu1939]矩阵乘法加速递推(详解)
题目传送门 题目大意:计算数列a的第n项,其中: \[a[1] = a[2] = a[3] = 1\] \[a[i] = a[i-3] + a[i - 1]\] \[(n ≤ 2 \times 10^ ...
- bzoj 4870: [Shoi2017]组合数问题
Description Solution 考虑这个式子的组合意义: 从 \(n*k\) 个球中取若干个球,使得球的数量 \(\%k=r\) 的方案数 可以转化为 \(DP\) 模型,设 \(f[i][ ...
- BZOJ_2738_矩阵乘法_整体二分
BZOJ_2738_矩阵乘法_整体二分 Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input 第一行两个数N,Q,表示矩阵大小和询问组数: 接下 ...
- BZOJ_1925_[Sdoi2010]地精部落_递推
BZOJ_1925_[Sdoi2010]地精部落_递推 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 ...
- BZOJ 5508: [Tjoi2019]甲苯先生的字符串 矩阵乘法_思维
求 $f[i][j]=∑f[i−1][k]$,$'a'<=k<='z'$ . 用矩阵乘法转移一波即可. 竟然独自想出来了QAQ Code: #include <bits/stdc++ ...
- 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}$表示从 ...
随机推荐
- 通过obs进行推流
我们除了通过ffmpeg进行推流外还可以使用OBS这个软件进行推流, 界面化工具,配置起来也方便 obs下载地址 obs的基本配置使用教程 这里需要注意的是在填写推流地址URL 的时候 有一个流秘钥 ...
- linux拷贝文件
linux之cp/scp命令+scp命令详解 2011-03-09 17:27:22| 分类: Linux | 标签:linux cp scp commond |字号 订阅 名称:c ...
- CorelDRAW X6+PhotoZoom这组合,无敌了啊!
520就这样毫无察觉的过去了,对于额这种单身狗,额表示,什么520,什么情人节,统统略过,,可是,可是,即便这样,还是硬生生的吃了一把来势凶猛的远在天际的狗粮,当我看到CorelDRAW X6和Pho ...
- Python 进行网络编程
Date: 2019-06-10 Author: Sun 1. Python TCP通信实现 socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: sock ...
- 使用C++部署Keras或TensorFlow模型
本文介绍如何在C++环境中部署Keras或TensorFlow模型. 一.对于Keras, 第一步,使用Keras搭建.训练.保存模型. model.save('./your_keras_model. ...
- 21_HTML&CSS
今日内容: 1. HTML标签:表单标签2. CSS: HTML标签:表单标签 * 表单: * 概念:用于采集用户输入的数据的.用于和服务器进行交互. * form:用于定义表单的.可以定义一个范围 ...
- 数组的filter用法
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素. 语法:var new_array = arr.filter(callback(element[, index[, a ...
- Python多环境扩展管理
Python发展至今,版本众多,在使用过程中经常遇到第三方库依赖的Python版本和系统Python版本不一致的情况.同时又因系统底层需调用当前版本Python,所以不能随意变更当前系统Python版 ...
- 自适应增强(Adaptive Boosting)
简介 AdaBoost,是英文”Adaptive Boosting“(自适应增强)的缩写,是一种迭代提升算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成 ...
- jQuery 文档操作
一.插入操作 1. 父元素.append(子元素) 追加某元素,在父元素中添加新的子元素, 子元素可以为: stirng / element (js对象) / jquery 元素 var oli = ...