hdu 3483 A Very Simple Problem
两种构造的方式都是正确的;
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的更多相关文章
- hdu 5349 MZL's simple problem
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5349 MZL's simple problem Description A simple proble ...
- HDU 4267 A Simple Problem with Integers 多个树状数组
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 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 ...
- HDU 3468:A Simple Problem with Integers(线段树+延迟标记)
A Simple Problem with Integers Case Time Limit: 2000MS Description You have N integers, A1, A2, ... ...
- 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 ( ...
- 【HDU 3483】 A Very Simple Problem (二项式展开+矩阵加速)
A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- 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 ...
- A Simple Problem with Integers 多树状数组分割,区间修改,单点求职。 hdu 4267
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 4267 A Simple Problem with Integers
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
随机推荐
- 关于ER图和UML图之间的对比
ER图与UML图 ER图:实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,ER图提供了表示实体(即数据对象).属性和联系的方法,用来 ...
- 2013 ACM/ICPC 长沙现场赛 C题 - Collision (ZOJ 3728)
Collision Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge There's a round medal ...
- 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
[转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...
- Android——控制UI界面
一.使用XML布局文件控制UI界面 res\layout\activity_main.xml代码如下: <FrameLayout xmlns:android="http://schem ...
- 【原创】java 流星划过天空
import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.s ...
- 第一次使用并配置Hibernate
1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate OR ...
- Android系统简介(中):系统架构
Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries & Android Runtime.Linux ...
- 关于ios的手势识别(GestureRecognizers)讲解
大家都知道,苹果的设备,不管是mac机器还是iPhone或iad,都支持多点触控,进而延伸了多种手势识别的功能.这为用户带来了很大的便携性和多样灵活性,极大的方便了用户的使用.足以见手势识别(Gest ...
- ubuntu16.04无法连接无线的问题解决方式以及QQ的安装
0x01 首先我是安装了win10与ubuntu16.04的双系统,不过遇到的问题有启动项与无线连接的问题,今天说一下联网的问题. 连接宽带是正常的,只需要操作sudo pppoeconf 这条命令即 ...
- OpenJudge/Poj 1316 Self Numbers
1.链接地址: http://poj.org/problem?id=1316 http://bailian.openjudge.cn/practice/1316 2.题目: 总时间限制: 1000ms ...