Codeforces_450B_Jzzhu and Sequences(循环节or矩阵快速幂)
来源:互联网 发布:三菱3uplc编程手册 编辑:程序博客网 时间:2024/05/21 06:19
题型:数论
题意:f1 = x, f2 = y ,fi = fi-1 + fi+1,求fn
分析:
题目本身不难,可以简单的寻找到长度为6的循环节,也可以用矩阵快速幂来做,分分钟搞定,需要注意的是答案的取模,由于|x|, |y| ≤ 10^9,所以(fn+mod)%mod可能不够,至少要加俩次mod
代码:
循环节做法:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>#define mt(a,b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define MAXN 123456#define LL __int64using namespace std;const LL MOD = 1e9+7;LL x,y,n;int main() { while(~scanf("%I64d%I64d",&x,&y)) { scanf("%I64d",&n); n %= 6; LL ans; if(n==1) { ans = x; } if(n==2) { ans = y; } if(n==3) { ans = y-x; } if(n==4) { ans = -x; } if(n==5) { ans = -y; } if(n==0) { ans = x-y; } ans = (ans+MOD+MOD)%MOD; printf("%I64d\n",ans); } return 0;}
矩阵快速幂做法:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<queue>#include<algorithm>#define LL __int64#define mt(a,b) memset(a,b,sizeof(a))#define M 4using namespace std;const LL mod = 1e9+7;class Matrix { //矩阵快速幂 typedef LL typev;public: typev val[M][M]; void zero() { memset(val,0,sizeof(val)); } void unit() { zero(); for(int i=0; i<M; i++) val[i][i]=1; }};int LEN;Matrix operator * (const Matrix &a,const Matrix &b) { Matrix tmp; tmp.zero(); for(int k=0; k<LEN; k++) for(int i=0; i<LEN; i++) { if(a.val[i][k]) for(int j=0; j<LEN; j++) { tmp.val[i][j]+=a.val[i][k]*b.val[k][j]; tmp.val[i][j]%=mod; } } return tmp;}Matrix operator ^ (Matrix &a,LL p) { Matrix tmp; tmp.unit(); while(p) { if(p&1) tmp=tmp*a; a=a*a; p>>=1; } return tmp;}LL x,y,n;int main() { while(~scanf("%I64d%I64d",&x,&y)){ scanf("%I64d",&n); if(n == 1){ printf("%I64d\n",(x+mod+mod)%mod); continue; } if(n == 2){ printf("%I64d\n",(y+mod+mod)%mod); continue; } LEN = 2; Matrix cef; cef.zero(); cef.val[0][0] = 1; cef.val[0][1] = -1; cef.val[1][0] = 1; cef = cef ^ (n-2); LL ans = y * cef.val[0][0] + x * cef.val[0][1]; ans = (ans + mod + mod) % mod; printf("%I64d\n",ans); } return 0;}
0 0
- Codeforces_450B_Jzzhu and Sequences(循环节or矩阵快速幂)
- Codeforces Round #257 (Div. 2) 450B - Jzzhu and Sequences(循环节或矩阵快速幂)
- Jzzhu and Sequences 【矩阵快速幂】
- CodeForces450B Jzzhu and Sequences (矩阵快速幂)
- Jzzhu and Sequences - CF 450B 矩阵快速幂版
- Codeforces 450B Jzzhu and Sequences(矩阵快速幂)
- Codeforces #257B Jzzhu and Sequences(矩阵快速幂)
- CF 450 B Jzzhu and Sequences(矩阵快速幂)
- hdu-4686 Jzzhu and Sequences 【矩阵快速幂】
- CodeForces 450BJzzhu and Sequences 矩阵快速幂
- Codeforces 450B Jzzhu and Sequences(矩阵快速幂)
- Codeforces 450B-Jzzhu and Sequences (矩阵快速幂)
- codeforces 450-B Jzzhu and Sequences 矩阵快速幂
- Codeforces 450B Jzzhu and Sequences(矩阵快速幂)
- Codeforces Round #257(Div. 2) B. Jzzhu and Sequences(矩阵快速幂)
- 【矩阵快速幂 】Codeforces 450B - Jzzhu and Sequences (公式转化)
- Codeforces Jzzhu and Sequences(循环节)
- hdu 4291 矩阵快速幂+循环节
- jQuery_review之textarea滚动条往上往下的实现
- AC自动机浅析
- POJ 2236 Wireless Network 简单并查集
- C#中堆和栈的区别分析
- Linux apt-get安装包文件在哪
- Codeforces_450B_Jzzhu and Sequences(循环节or矩阵快速幂)
- Linux安装软件有关的命令(dpkg 安装deb包)
- Linux程序设计笔记(第3章 文件操作)
- 设置UIView的边界为圆角矩形
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- 进程间通信与线程间通信简单总结
- Linux程序设计笔记(第9章 开发工具)
- SPRINGMVC的核心原理
- POJ1990 MooFest 树状数组(Binary Indexed Tree,BIT)