hdu 4565 So Easy!
2014-05-02 10:07
302 查看
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4565
可以参考hdu2256解法类似:/article/10999491.html
可以参考hdu2256解法类似:/article/10999491.html
#include <iostream> #include <cstdio> #include <cstring> using namespace std; typedef long long LL; struct Matrix { LL iMatrix[2][2]; }; Matrix iPer, iCell; LL a, b, n, iMod; void Inite_Matrix() { iPer.iMatrix[0][0] = iPer.iMatrix[1][1] = 1, iPer.iMatrix[0][1] = iPer.iMatrix[1][0] = 0; iCell.iMatrix[0][0] = iCell.iMatrix[1][1] = a, iCell.iMatrix[0][1] = b, iCell.iMatrix[1][0] = 1; } Matrix Multi_Matrix(Matrix a, Matrix b) { Matrix c; int i, j, k; for(i = 0; i < 2; ++i) { for(j = 0; j < 2; ++j) { c.iMatrix[i][j] = 0; for(k = 0; k < 2; ++k) { c.iMatrix[i][j] = (c.iMatrix[i][j]%iMod + ((a.iMatrix[i][k]%iMod) * (b.iMatrix[k][j]%iMod))%iMod)%iMod; } } } return c; } Matrix Quick_Mod_Matrix(LL n) { if(n == 1) return iCell; Matrix c, tmp; tmp = iCell; c = iPer; while(n) { if(n&1) { c = Multi_Matrix(c, tmp); n--; } n >>= 1; tmp = Multi_Matrix(tmp, tmp); } return c; } int main() { Matrix c; while(~scanf("%lld %lld %lld %lld", &a, &b, &n, &iMod)) { Inite_Matrix(); c = Quick_Mod_Matrix(n); printf("%lld\n", (2*(c.iMatrix[0][0]%iMod)%iMod)); } return 0; }
相关文章推荐
- HDU 4565 - 2013年长沙邀请赛 A-so easy
- hdu 4565 so easy 线性递推+矩阵乘法+快速幂 2013湖南区域邀请赛
- hdu 4565 So Easy!
- HDU 4565矩阵快速幂—— So Easy!
- hdu 4565 So Easy! 矩阵快速幂
- HDU 4565 So Easy!
- HDU 4565 So Easy!
- HDU 4565 So Easy! 共轭构造+矩阵快速幂
- 数学公式+矩阵快速幂 hdu-4565 So Easy!
- hdu 4565 So Easy!(矩阵+快速幂)
- HDU 4565 So Easy!
- hdu 4565 So Easy! /2013 ACM-ICPC 长沙赛区全国邀请赛A题 矩阵乘法
- HDU 4565 So Easy!
- HDU 4565 So Easy!
- HDU 4565 -- So Easy! (矩阵幂模板)
- So Easy! HDU - 4565(矩阵快速幂,无理数矩阵构造,共轭构造)
- HDU 4565 So Easy!(思想+矩阵快速幂)——2013 ACM-ICPC长沙赛区全国邀请赛
- hdu 4565 So Easy!(矩阵+快速幂)
- HDU 4565 So Easy!(数学+矩阵快速幂)
- HDU 4565 So Easy!(矩阵快速幂)