这个题目上周对抗赛题目,搞了我好久 对数学这种不是很敏感

其实都不是自己想出来的,看其他的资料和博客的推导 还是有点难度的,反正我是推不出来

通过二项式定理的化简

有两个博客写得比较好

http://972169909-qq-com.iteye.com/blog/1863402

http://www.cppblog.com/Yuan/archive/2010/08/13/123268.html

反正构造好二项式之后,乘N次,就可以得到结果了,因为右边的式子 初始全部是x。

#include <iostream>
#include <cstring>
#include <cstdio>
#define ll __int64
using namespace std;
const int maxn = ;
ll c[maxn][maxn], a[maxn][maxn], b[maxn][maxn], t[maxn][maxn];
ll N,x,M;
void init()
{
int i, j;
memset(c, , sizeof(c));
for (i = ; i <= x; i++)
{
c[i][] = c[i][i] = ;
for (j = ; j < i; j++)
{
c[i][j] = (c[i-][j] + c[i-][j-]) % M;
}
}
memset(a, , sizeof(a));
for (i = ; i <= x; i++)
{
for (j = ; j <= i; j++)
{
a[i][j] = (c[i][j] * x) % M;
}
}
memcpy(a[x+], a[x], sizeof(a[x]));
a[x+][x+] = ;
memset(b, , sizeof(b));
for (i = ; i <= x+; i++)
{
b[i][i] = ;
}
}
void mul(long long p[maxn][maxn], long long q[maxn][maxn])
{
int i, j, k;
memset(t, , sizeof(t));
for (i = ; i <= x+; i++)
{
for (j = ; j <= x+; j++)
{
for (k = ; k <= x+; k++)
{
t[i][j] = (t[i][j] + p[i][k] * q[k][j]) % M;
}
}
}
memcpy(q, t, sizeof(t));
}
void cal()
{
while (N)
{
if (N & )
{
mul(a, b);
}
mul(a, a);
N >>= ;
}
}
int main()
{
while (scanf("%I64d %I64d %I64d", &N, &x,&M)&& N> && x> &&M>)
{
init();
cal();
printf("%I64d\n", b[x+][]);
}
return ;
}

hdu 3483 矩阵乘法的更多相关文章

  1. *HDU 1757 矩阵乘法

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  2. Hdu 4920矩阵乘法(内存访问的讲究)

    题目链接 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K ( ...

  3. 一些特殊的矩阵快速幂 hdu5950 hdu3369 hdu 3483

    思想启发来自, 罗博士的根据递推公式构造系数矩阵用于快速幂 对于矩阵乘法和矩阵快速幂就不多重复了,网上很多博客都有讲解.主要来学习一下系数矩阵的构造 一开始,最一般的矩阵快速幂,要斐波那契数列Fn=F ...

  4. HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)

    传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...

  5. HDU 5607 graph(DP+矩阵乘法)

    [题目链接] http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=663&pid=1002 [题意] 给定一个有向 ...

  6. 【HDU 3483】 A Very Simple Problem (二项式展开+矩阵加速)

    A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  7. HDU 2604 Queuing (矩阵乘法)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  8. HDU 5863 cjj's string game (矩阵乘法优化递推)

    题目大意:用k种字符构建两个长度为n的字符串(每种字符有无限多个),要求对应位置字符相同的连续子串最长长度为m,问方法数. 其中k,n,m是输入,n(1<=n<=1000000000), ...

  9. Hdu 2157 How many ways??(DP||矩阵乘法)

    How many ways?? Time Limit:1000 MS Memory Limit: 32768 K Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, ...

随机推荐

  1. eshop-环境配置

    1. iptables # Generated by iptables-save v1. :: #*filter #:INPUT ACCEPT [:] #:FORWARD ACCEPT [:] #:O ...

  2. gem5-gpu 运行 PARSEC2.1

    PARSEC是针对共享内存多核处理器(CPU)的一套基准测试程序,详细介绍见wiki:http://wiki.cs.princeton.edu/index.php/PARSEC,主要参考:http:/ ...

  3. 吴裕雄--天生自然java开发常用类库学习笔记:定时调度

    // 完成具体的任务操作 import java.util.TimerTask ; import java.util.Date ; import java.text.SimpleDateFormat ...

  4. Day 29:HTML常用标签

    软件的结构:  cs结构的软件的缺点:更新的时候需要用户下载更新包然后再安装,需要开发客户端与服务端.  cs结构软件的优点: 减轻服务端的压力,而且可以大量保存数据在客户端.  C/S(Client ...

  5. 在 CentOS 中部署 KMS 服务器(vlmcsd)

    准备 vlmcsd 下载 vlmcsd 本文使用的 vlmcsd 版本为 svn1111,支持的产品: Windows Vista – 10Windows Server 2008 - 2016Offi ...

  6. oracle和mysql的一些区别

    1.分页查询语句的区别 2.字符串拼接的区别,oracle不支持三个字符串的拼接,mysql支持三个字符串的拼接,在mybatis中,连接的是oracle数据库,字符串的拼接需要如下语句: <s ...

  7. 存储器HK1225-7EQ 使用说明书资料

    一. 引脚排列 二. 读取模式 HK1225在WE(写使能)被禁止(high)且CE(片选)被选中(Low)且CE2(片选2)被选中(High)并且OE(读信号)被使能(Low)执行一次读循环.13个 ...

  8. oracle查询SQL优化相当重要

    如果表中的时间字段是索引,那么时间字段不要使用函数,函数会使索引失效. 例如: select * from mytable where trunc(createtime)=trunc(sysdate) ...

  9. Zookeeper 在 Kafka 中的作用

    https://www.jianshu.com/p/a036405f989c 待整理...

  10. Golang modules包依赖管理工具

    初始化 执行go mod  init module-name,其中module-name为包名字,执行完后会生成go.mod文件,如下 module module-name go 1.13 包管理 使 ...