[BZOJ4870][Shoi2017]组合数问题 dp+矩阵乘
4870: [Shoi2017]组合数问题
Time Limit: 10 Sec Memory Limit: 512 MB
Description
.jpg)
Input
Output
Sample Input
Sample Output
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long LL;
const int N=;
LL n,p,k,r;
struct marx
{
LL m[N][N];
inline void print()
{
for(int i=;i<k;i++)
{
for(int j=;j<k;j++)
printf("%lld ",m[i][j]);
printf("\n");
}
printf("\n");
}
inline void clear(){memset(m,,sizeof(m));}
marx operator * (const marx &b) const
{
marx c;c.clear();
for(int i=;i<k;i++)
for(int j=;j<k;j++)
for(int u=;u<k;u++)
c.m[i][j]=(c.m[i][j]+m[i][u]*b.m[u][j])%p;
return c;
}
}A,B,C;
int main()
{
scanf("%lld%lld%lld%lld",&n,&p,&k,&r);
A.clear(),B.clear(),C.clear();
C.m[][]=;
for(int j=;j<k;j++)
B.m[j][j]=,A.m[(j-+k)%k][j]++,A.m[j][j]++;
LL tmp=n*k;
while(tmp)
{
if(tmp&)B=B*A;
tmp>>=;A=A*A;
}
C=C*B;
printf("%lld\n",C.m[][r]);
}
[BZOJ4870][Shoi2017]组合数问题 dp+矩阵乘的更多相关文章
- BZOJ4870:[SHOI2017]组合数问题(组合数学,矩阵乘法)
Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 ...
- BZOJ_4870_[Shoi2017]组合数问题_矩阵乘法
BZOJ_4870_[Shoi2017]组合数问题_矩阵乘法 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ ...
- BZOJ4870: [Shoi2017]组合数问题
4870: [Shoi2017]组合数问题 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ...
- bzoj4870: [Shoi2017]组合数问题(DP+矩阵乘法优化)
为了1A我居然写了个暴力对拍... 那个式子本质上是求nk个数里选j个数,且j%k==r的方案数. 所以把组合数的递推式写出来f[i][j]=f[i-1][j]+f[i-1][(j-1+k)%k].. ...
- 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法
题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...
- BZOJ4870 [Shoi2017]组合数问题 【组合数 + 矩乘】
题目链接 BZOJ4870 题解 \[ans = \sum\limits_{i = 0}^{\infty}{nk \choose ik + r} \pmod p\] 发现实际是求 \[ans = \s ...
- BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法
注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include ...
- 【BZOJ4870】[Shoi2017]组合数问题 动态规划(矩阵乘法)
[BZOJ4870][Shoi2017]组合数问题 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < ...
- bzoj 4870: [Shoi2017]组合数问题 [矩阵乘法优化dp]
4870: [Shoi2017]组合数问题 题意:求 \[ \sum_{i=0}^{n-1} \binom{nk}{ik+r} \mod p \] \(n \le 10^9, 0\le r < ...
随机推荐
- day 9 名字管理系统
1 while True ##### 布尔值:True or False In [8]: a = 19 In [6]: a > 18 Out[6]: True In [7]: a < 18 ...
- Jlink v8仿真器在64位系统上刷固件
1. 安装软件sam-ba_2.16.exe.本次主要是Jlink v8在64位系统下面的刷固件方法. 2. J-link通过USB连接至电脑,短接PCB上标号为ERASE的焊盘5秒,断开ERASE两 ...
- Lambada表达式的作用
Lambda函数的用处 假设你设计了一个地址簿的类.现在你要提供函数查询这个地址簿,可能根据姓名查询,可能根据地址查询,还有可能两者结合.要是你为这些情况都写个函数,那么你一定就跪了.所以你应该提 ...
- 一个IP可以登几个拼多多后台 拼多多如何推广营销
想要在拼多多上开双店?担心一根网线会引起IP冲突?那么一根网线可以登几个拼多多后台呢?有数据显示,挂双店是没有问题的,甚至可以多开.那么解决了一根网线的事情,要怎么对自己的店铺进行营销推广呢?下面是小 ...
- Linux的10个最危险的命令
Linux命令行佷有用.很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候. 这篇文章将会向你介绍十条命令,但你最好不要尝试着去使用. 当然,以下命令通常都是在root权限下才 ...
- idea scala 报 with UTF-8 Please try specifying another one using the -encoding option
现象如下图, 代码里有汉字,执行代码报错,说编码格式不对, 修改方式如上面,将右下角的编码格式修改成 u8即可.
- redis 批量删除操作
redis 批量删除操作 需要在redis里面清空一批数据,redis没有支持通配符删除, 只有del key1 key2 ... 但是可以通配符获取 KEYS PATTERN 然后利用linux管道 ...
- Linux系统服务(daemon)(鸟哥Linux私房菜笔记)
Linux系统服务(daemon) 一.SystemV的init管理机制(脚本式启动)1.服务启动分类stand alone 独立启动模式super daemon 总管程序 2.服务的启动.关闭与观察 ...
- 如何让QT程序以管理员权限运行(UAC)
方案一:(仅适用于使用msvc编译器) 在PRO文件中添加一行指令即可, QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator' ...
- shell命令之at 执行一次性定时任务的用法
大家都知道crontab是执行定时任务的命令,那么at又是什么呢? 其实at也是定时任务命令,不同的是crontab是执行循环任务,at执行一次性任务 首先说下时间例子 Minute at no ...