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]组合数问题的更多相关文章

  1. bzoj 4870: [Shoi2017]组合数问题 [矩阵乘法优化dp]

    4870: [Shoi2017]组合数问题 题意:求 \[ \sum_{i=0}^{n-1} \binom{nk}{ik+r} \mod p \] \(n \le 10^9, 0\le r < ...

  2. BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法

    注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include ...

  3. BZOJ 4870: [Shoi2017]组合数问题 矩阵乘法_递推

    Code: #include <cstdio> #include <cstring> #include <algorithm> #define setIO(s) f ...

  4. 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}$表示从 ...

  5. BZOJ4870: [Shoi2017]组合数问题

    4870: [Shoi2017]组合数问题 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ...

  6. [BZOJ4870][Shoi2017]组合数问题 dp+矩阵乘

    4870: [Shoi2017]组合数问题 Time Limit: 10 Sec  Memory Limit: 512 MB Description Input 第一行有四个整数 n, p, k, r ...

  7. BZOJ_4870_[Shoi2017]组合数问题_矩阵乘法

    BZOJ_4870_[Shoi2017]组合数问题_矩阵乘法 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ ...

  8. [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅

    [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅 题意 比较复杂放LOJ题面好了qaq... Kiana 最近喜欢到一家非常美味的寿司餐厅用餐. 每天晚上,这家餐厅都会按顺序提供 ...

  9. 【BZOJ4870】[Shoi2017]组合数问题 动态规划(矩阵乘法)

    [BZOJ4870][Shoi2017]组合数问题 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < ...

随机推荐

  1. SciPy - 科学计算库(上)

    SciPy - 科学计算库(上) 一.实验说明 SciPy 库建立在 Numpy 库之上,提供了大量科学算法,主要包括这些主题: 特殊函数 (scipy.special) 积分 (scipy.inte ...

  2. 201621123043 《Java程序设计》第1周学习总结

    1. 本章学习总结 Jdk的安装: eclipse的基本使用方法 Java发展史 jdk.jre.jvm 关键词之间的联系:是整个java的核心,包括了一堆java.java基础的类库.java运行环 ...

  3. 几款有用的AndroidStudio插件

    1.Android Parcelable code generator 顾名思义,这是个生成实现了Parcelable接口的代码的插件. 在你的类中,按下alt + insert键弹出插入代码的上下文 ...

  4. 亚马逊AWS学习——EC2的自定义VPC配置

    1 网络配置 EC2即亚马逊AWS云服务中的虚拟主机.创建EC2实例时如果使用的默认VPC并分配了公有IP是可以上网的.但我们经常需要自定义的网络环境,这时就需要自己定义VPC和子网了. 1.1 配置 ...

  5. Swift 2.2 的新特性

    导读:本文来自SwiftGG翻译组,作者@walkingway基于苹果Swift官方博客中Ted Kremenek所撰写的"Swift 2.2 Released!"文章进行了关于S ...

  6. MySql数据库的常用命令

    1.连接Mysql 连接本地的mysql数据库 :   mysql -u root -p    (回车之后会提示输入密码) 连接远程主机的mysql数据库 : 假设远程主机的IP为:110.110.1 ...

  7. vue 的模板编译—ast(抽象语法树) 详解与实现

    首先AST是什么? 在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言 ...

  8. sql 多条记录插入

    --多条记录插入,用逗号分开值. INSERT dbo.studentinfor ( id, name, class, age, hpsw ) ', -- id - nvarchar(50) N'te ...

  9. linux下的Shell编程(5)循环

    Shell Script中的循环有下面几种格式: while [ cond1 ] && { || } [ cond2 ] -; do - done for var in -; do - ...

  10. 新概念英语(1-71)He's awful!

    He's awful!How did Pauline answer the telephone at the nine o'clock?A:What's Ron Marston like, Pauli ...