hdu 3483 矩阵乘法
这个题目上周对抗赛题目,搞了我好久 对数学这种不是很敏感
其实都不是自己想出来的,看其他的资料和博客的推导 还是有点难度的,反正我是推不出来
通过二项式定理的化简
有两个博客写得比较好
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 矩阵乘法的更多相关文章
- *HDU 1757 矩阵乘法
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- Hdu 4920矩阵乘法(内存访问的讲究)
题目链接 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K ( ...
- 一些特殊的矩阵快速幂 hdu5950 hdu3369 hdu 3483
思想启发来自, 罗博士的根据递推公式构造系数矩阵用于快速幂 对于矩阵乘法和矩阵快速幂就不多重复了,网上很多博客都有讲解.主要来学习一下系数矩阵的构造 一开始,最一般的矩阵快速幂,要斐波那契数列Fn=F ...
- HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)
传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...
- HDU 5607 graph(DP+矩阵乘法)
[题目链接] http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=663&pid=1002 [题意] 给定一个有向 ...
- 【HDU 3483】 A Very Simple Problem (二项式展开+矩阵加速)
A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- HDU 2604 Queuing (矩阵乘法)
Queuing Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 5863 cjj's string game (矩阵乘法优化递推)
题目大意:用k种字符构建两个长度为n的字符串(每种字符有无限多个),要求对应位置字符相同的连续子串最长长度为m,问方法数. 其中k,n,m是输入,n(1<=n<=1000000000), ...
- Hdu 2157 How many ways??(DP||矩阵乘法)
How many ways?? Time Limit:1000 MS Memory Limit: 32768 K Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, ...
随机推荐
- 八、Delphi10.3读取JSON文件,并修改JSON数组一条内容后保存到文件
一.我们有一个JSON文件,如下: { "在野": [ { "城池": 0, "武将": 74, "登场年": 190 ...
- DevOps - 与敏捷方法区别
章节 DevOps – 为什么 DevOps – 与传统方式区别 DevOps – 优势 DevOps – 不适用 DevOps – 生命周期 DevOps – 与敏捷方法区别 DevOps – 实施 ...
- Linux学习总结《shell脚本》知识点关键-用好“过滤器”
- POJ 1472:Instant Complexity 模拟时间复杂度
Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1908 Accepted: 658 ...
- 读取docx表格中的信息
参考了 http://blog.csdn.net/qq_34475777/article/details/62055523 http://www.cnblogs.com/deepwaterplan/a ...
- windows炸鸡啤酒
20170831 今天郁闷,一台windwos远处不上去,被怼了,只能说我活该,事先不弄清楚自己负责的服务运行机器的管理员. 今天尤其特别想知道这台windows跑了多久(linux:uptime), ...
- objectarx 批量倒角
这个插件支持AcDbPolyline的倒角,封闭的和没封闭的都可以.刚开始做的时候,发现倒一个角借助云幽课堂里的代码就可以做,后来做一条从左开始画的非封闭的多段线,发现向上凹和向下凹的角不能同时被倒, ...
- 【问题管理】-- Tomcat8部署项目加载静态资源html页面编码错误
1.问题背景及解决方式 最近在回顾Tomcat部署Web项目,自己简单地从Tomcat的下载安装及配置server.xml文件入手,学习Tomcat的项目部署,在自己使用IDEA创建了一个简单地web ...
- 记录第一次制作pypi包的过程
准备工作 1.创建一个项目文件夹 mkdir dada_openapi_python cd dada_openapi_python 2.创建包文件夹 在里面在创建一个 dada_openapi_cli ...
- 111-PHP类变量之间的赋值标识为同一个对象
<?php class mao{ //定义猫类 public $age=0; //定义多个属性并初始化 public $weight=50; public $color='white'; } $ ...