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 < ...
随机推荐
- MySQL之数据的insert-delete-update操作
主要是对数据的一些基本操作:增加.删除.修改
- alpha冲刺第十天
一.合照 二.项目燃尽图 三.项目进展 之前卡住的注册无法插入数据的问题解决 可以呈现多条数据内容了,首页文章内容呈现,问答界面问题内容呈现 四.明日规划 很多没有完善的,后面还是要继续整改 五.问题 ...
- Beta阶段敏捷冲刺报告-DAY3
Beta阶段敏捷冲刺报告-DAY3 Scrum Meeting 敏捷开发日期 2017.11.4 会议时间 12:30 会议地点 软工所 参会人员 全体成员 会议内容 当天任务确认,进度调整, 讨论时 ...
- C语言——第六周作业
题目 题目一:高速公路超速处罚 1.实验代码 #include <stdio.h> int main() { int speed,maxspeed; double x; scanf(&qu ...
- verilog学习笔记(3)_task/case小例子及其tb
module ex_case `timescale lns/1ns module ex_case( input wire rst_n, input wire sclk, output reg [7:0 ...
- 数据故障的恢复-MSSQL ndf文件大小变为0 KB恢复过程
一.故障描述 成都某客户,存储损坏,数据库崩溃.重组存储,恢复数据库文件,发现有四个ndf文件大小变为0 KB.数据库大小约80TB.数据库中有1223个文件,数据库每10天生成一个NDF文件,每个N ...
- php的函数参数按照从左到右来赋值
PHP 中自定义函数参数赋默认值 2012-07-07 13:23:00| 分类: php自定义函数,默|举报|字号 订阅 下载LOFTER我的照片书 | php自定义函数接受参数 ...
- PHP类的自动加载
spl_autoload_register(function ($className) { require str_replace('\\', '/', $className '.php'); }) ...
- Python内置函数(39)——help
英文文档: help([object]) Invoke the built-in help system. (This function is intended for interactive use ...
- js判断语句关于true和false后面跟数字或字符串的问题
我经常在代码中看到很长串判断,看到就头疼,简单的整理一下. 比如:(client.top>=0&&client.left>=0&&client.bottom ...