两种构造的方式都是正确的;

1.

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 60
#define ll long long
using namespace std;
int x;
ll M,n;
struct matrix
{
int len_x;
int len_y;
ll data[maxn][maxn];
void ini()
{
len_x=;
len_y=;
memset(data,,sizeof data);
}
}; matrix mat_big;
ll f[maxn][maxn];
matrix s; matrix mat_mul(matrix mat,matrix t)
{
matrix ans;
ans.ini();
ans.len_x=mat.len_x;
ans.len_y=t.len_y;
for(int i=; i<mat.len_x; i++)
{
for(int j=; j<t.len_y; j++)
{
for(int k=; k<mat.len_y; k++)
{
ans.data[i][j]+=(mat.data[i][k]*t.data[k][j])%M;
ans.data[i][j]%=M;
}
}
}
return ans;
} int main()
{
f[][]=;
for(int i=; i<maxn; i++)
for(int j=; j<=i; j++)
{
f[i][j]=f[i-][j]+f[i-][j-];
}
while(scanf("%lld%d%lld",&n,&x,&M)&&n!=-)
{
mat_big.ini();
mat_big.len_x=x+;
mat_big.len_y=x+;
for(int i=; i<=x; i++)
for(int j=; j<=i; j++)
{
mat_big.data[i][j]=x*f[i][j];
if(mat_big.data[i][j]>M)mat_big.data[i][j]%=M;
}
// for(int i=0; i<=x; i++)
// mat_big.data[x+1][i]=mat_big.data[x][i];
mat_big.data[x+][x+]=;
mat_big.data[x+][x]=;
s.ini();
s.len_y=;
s.len_x=x+;
s.data[][]=;
s.data[x+][]=;
// for(int i=0;i<=x+1;i++)
// s.data[i][0]=1;
matrix ret;
ret.ini();
ret.len_x=x+;
ret.len_y=x+;
for(int i=; i<ret.len_x; i++)
ret.data[i][i]=;
n++;
while(n)
{
if(n&)ret=mat_mul(ret,mat_big);
n>>=;
mat_big=mat_mul(mat_big,mat_big);
}
matrix ans=mat_mul(ret,s);
printf("%lld\n",ans.data[x+][]);
}
return ;
}

2.

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 60
#define ll long long
using namespace std;
int x;
ll M,n;
struct matrix
{
int len_x;
int len_y;
ll data[maxn][maxn];
void ini()
{
len_x=;
len_y=;
memset(data,,sizeof data);
}
}; matrix mat_big;
ll f[maxn][maxn];
matrix s; matrix mat_mul(matrix mat,matrix t)
{
matrix ans;
ans.ini();
ans.len_x=mat.len_x;
ans.len_y=t.len_y;
for(int i=; i<mat.len_x; i++)
{
for(int j=; j<t.len_y; j++)
{
for(int k=; k<mat.len_y; k++)
{
ans.data[i][j]+=(mat.data[i][k]*t.data[k][j])%M;
ans.data[i][j]%=M;
}
}
}
return ans;
} int main()
{
f[][]=;
for(int i=; i<maxn; i++)
for(int j=; j<=i; j++)
{
f[i][j]=f[i-][j]+f[i-][j-];
}
while(scanf("%lld%d%lld",&n,&x,&M)&&n!=-)
{
mat_big.ini();
mat_big.len_x=x+;
mat_big.len_y=x+;
for(int i=; i<=x; i++)
for(int j=; j<=i; j++)
{
mat_big.data[i][j]=x*f[i][j];
if(mat_big.data[i][j]>M)mat_big.data[i][j]%=M;
}
for(int i=; i<=x; i++)
mat_big.data[x+][i]=mat_big.data[x][i];
mat_big.data[x+][x+]=;
// mat_big.data[x+1][x]=1;
s.ini();
s.len_y=;
s.len_x=x+;
s.data[][]=;
s.data[x+][]=;
// for(int i=0;i<=x+1;i++)
// s.data[i][0]=1;
matrix ret;
ret.ini();
ret.len_x=x+;
ret.len_y=x+;
for(int i=; i<ret.len_x; i++)
ret.data[i][i]=;
while(n)
{
if(n&)ret=mat_mul(ret,mat_big);
n>>=;
mat_big=mat_mul(mat_big,mat_big);
}
matrix ans=mat_mul(ret,s);
printf("%lld\n",ans.data[x+][]);
}
return ;
}

hdu 3483 A Very Simple Problem的更多相关文章

  1. hdu 5349 MZL's simple problem

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5349 MZL's simple problem Description A simple proble ...

  2. HDU 4267 A Simple Problem with Integers 多个树状数组

    A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  3. 2015 Multi-University Training Contest 5 hdu 5349 MZL's simple problem

    MZL's simple problem Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  4. HDU 3468:A Simple Problem with Integers(线段树+延迟标记)

    A Simple Problem with Integers Case Time Limit: 2000MS Description You have N integers, A1, A2, ... ...

  5. hdu_3483A Very Simple Problem(C(m,n)+快速幂矩阵)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3483 A Very Simple Problem Time Limit: 4000/2000 MS ( ...

  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. A simple problem 分类: 哈希 HDU 2015-08-06 08:06 1人阅读 评论(0) 收藏

    A simple problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...

  8. A Simple Problem with Integers 多树状数组分割,区间修改,单点求职。 hdu 4267

    A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  9. HDU 4267 A Simple Problem with Integers

    A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K ...

随机推荐

  1. 关于JFace带复选框的树

    树的复选框用CheckboxTreeViewer实现.由于其子类ContainerCheckedTreeViewer在没有选择全部子节点时可以自动将父节点设置成灰选,所以实现树的复选框更多的是用Con ...

  2. 使用jsonp跨域请求

    一.异步对象,不能实现跨域请求 在站点A中访问站点B的数据: 站点A代码: window.onload = function () { document.getElementById("bt ...

  3. dagger和butterknife使用冲突

    两者会冲突的主要原因是因为两者都有:javax.annotation.processing.Processor 于是在build.gradle中添加如下配置即可: // 注释冲突 packagingO ...

  4. ios - objective-c runtime之随笔

    今天身体不舒服,还顶着写这篇博客. 举个例子,我们之前在写objective-c代码时,经常用到id这个关键字.那 id 究竟是什么?在objective-c的运行时,这样描述的,它其实是一个结构体( ...

  5. [leetcode] 401. Binary Watch

    https://leetcode.com/contest/5/problems/binary-watch/ 这个题应该是这次最水的,这个题目就是二进制,然后是10位,最大1024,然后遍历,找二进制里 ...

  6. 学习C++ Primer 的个人理解(十)

    标准库没有给每个容器都定义成员函数来实现 查找,替换等操作.而是定义了一组泛型算法,他们可以用于不同类型的元素或多种容器类型. 迭代器令算法不依赖与容器 算法永远不会执行容器的操作 算法本身不会执行容 ...

  7. [翻译][MVC 5 + EF 6] 6:创建更复杂的数据模型

    原文:Creating a More Complex Data Model for an ASP.NET MVC Application 前面的教程中,我们使用的是由三个实体组成的简单的数据模型.在本 ...

  8. Android_Json实例

    概要: 最近由于自己的兴趣,想在Android开发一个自己的App,需要使用服务器,所以交换数据是逃不掉了的,但是学生党没有固定的服务器,因此使用的新浪的SAE,在学习的前期下可以尝试一下,挺不错的一 ...

  9. 对WebClient扩展自动解压缩页面

    WebClient下载压缩网页时出现的全是乱码,可通过扩展来解决这个问题. public class MyWebClient : WebClient { protected override WebR ...

  10. 为什么a标签中使用img后的高度多了几个像素?

    a元素下有一个匿名文本,这个文本外有一个匿名行级盒子,它有的默认vertical-align是baseline的,而且往往因为上文line-height的影响,使它有个line-height,从而使其 ...