HDU - 4686 Arc of Dream(矩阵快速幂,水题)
题目链接:点击查看
题目大意:给出定义:
现在依次给出n,A0,AX,AY,B0,BX,BY
求Aod的第n项对1e9+7取模后的结果
题目分析:
简单矩阵快速幂
首先化简一下:
初始矩阵:(取n=1即可)
1 |
辅助矩阵:
1 | 0 | 0 | 0 | 0 |
1 | AX*BX | 0 | 0 | 0 |
0 | AX*BY | AX | 0 | 0 |
0 | BX*AY | 0 | BX | 0 |
0 | AY*BY | AY | BY | 1 |
答案矩阵:
1 |
注意几个小坑:
- 需要特判n==0时输出0
- 初始参数给的很大,相乘后需要立即取模,不然在运算的过程中会爆long long
然后套模板即可,上代码:
#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#define Pi acos(-1.0)
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int mod=1e9+7;const int N=5;struct Ma
{LL a[N][N];Ma(){memset(a,0,sizeof(a));}friend Ma operator*(const Ma& a,const Ma& b){Ma ans;for(int i=0;i<N;i++)for(int j=0;j<N;j++){ans.a[i][j]=0;for(int k=0;k<N;k++){ans.a[i][j]=(ans.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod;}}return ans;}
};Ma q_pow(Ma a,LL b)
{Ma ans;for(int i=0;i<N;i++)ans.a[i][i]=1;while(b){if(b&1)ans=ans*a;a=a*a;b>>=1;}return ans;
}int main()
{
// freopen("input.txt","r",stdin);LL n;while(scanf("%lld",&n)!=EOF){LL a0,ax,ay,b0,bx,by;scanf("%lld%lld%lld%lld%lld%lld",&a0,&ax,&ay,&b0,&bx,&by);if(n==0)//特判0 {printf("0\n");continue;}Ma st;st.a[0][0]=0;st.a[0][1]=a0*b0%mod;//日常模一模st.a[0][2]=a0;st.a[0][3]=b0;st.a[0][4]=1;Ma ans;ans.a[0][0]=1;ans.a[1][0]=1;ans.a[1][1]=ax*bx%mod;//记得取模ans.a[2][1]=ax*by%mod;ans.a[3][1]=bx*ay%mod;ans.a[4][1]=ay*by%mod;ans.a[2][2]=ax;ans.a[4][2]=ay;ans.a[3][3]=bx;ans.a[4][3]=by;ans.a[4][4]=1;ans=q_pow(ans,n);printf("%lld\n",(st*ans).a[0][0]);}return 0;
}
HDU - 4686 Arc of Dream(矩阵快速幂,水题)相关推荐
- HDU4686——Arc of Dream矩阵快速幂
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4686 题目大意: 已知a0=A0, ai=Ax*ai-1+Ay; b0=B0, bi=Bx*bi-1 ...
- HDU4686 Arc of Dream —— 矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-4686 Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memo ...
- HDU 5950 Recursive sequence(矩阵快速幂)
题目链接:Recursive sequence 题意:给出前两项和递推式,求第n项的值. 题解:递推式为:$F[i]=F[i-1]+2*f[i-2]+i^4$ 主要问题是$i^4$处理,容易想到用矩阵 ...
- POJ3070矩阵快速幂简单题
题意: 求斐波那契后四位,n <= 1,000,000,000. 思路: 简单矩阵快速幂,好久没刷矩阵题了,先找个最简单的练练手,总结下矩阵推理过程,其实比较简单,关键 ...
- 又见斐波那契~矩阵快速幂入门题
链接:https://www.nowcoder.com/acm/contest/105/G 来源:牛客网 题目描述 这是一个加强版的斐波那契数列. 给定递推式 求F(n)的值,由于这个值可能太大,请对 ...
- 51nod 1113 矩阵快速幂 模板题
1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计 ...
- HDU 4686 Arc of Dream(递归矩阵加速)
标题效果:你就是给你一程了两个递推公式公式,第一个让你找到n结果项目. 注意需要占用该公式的复发和再构造矩阵. Arc of Dream Time Limit: 2000/2000 MS (Java/ ...
- hdu 4686 Arc of Dream
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4686 题目描述: 题目上说的很清楚. 解题思路: 就是递推,用快速幂+构造矩阵解决,因为n的取值范围 ...
- HDU - 5411 CRB and Puzzle 矩阵快速幂
HDU - 5411 考虑直接dp会T, 用矩阵优化一下就好了. #include<bits/stdc++.h> #define LL long long #define LD long ...
最新文章
- Centos配置国内yum源
- ORA-01658: 无法为表空间space中的段创建 INITIAL
- 走近虚拟机——McAfee研究员孙冰谈虚拟机技术和虚拟机安全
- 大数据WEB阶段(五)jQuery
- 电脑软件:5个实用的Windows软件,大幅度提高你的工作效率!
- C - Cats Gym - 102875C
- VC6编译卡死之解决办法
- 唯一《可解释机器学习》中文书来了:复旦研究生翻译,原作者转发点赞
- 11选5下期算法_玫瑰2020196期福彩3D推荐:双胆2、6,和值看好11
- Dirichlet Process 和 Dirichlet Process Mixture模型
- iOS字体适配方法总结
- Visual Studio2012 安装教程
- 嵌入式工程师必须知道的一些好网站
- pygame模块实现乌龟吃鱼游戏案例
- 企业微信外部联系人回调事件
- 当今主流浏览器内核简介
- 【Python】Marshmallow:Python中的“棉花糖”
- LeetCode 简单算法题
- 制作动态图表,没有比这个方法更简单的了
- 数据库中LIMIT和 OFFSET的理解