HDU3306 -- Another kind of Fibonacci 构造矩阵然后矩阵快速幂
来源:互联网 发布:上古卷轴5cpu优化补丁 编辑:程序博客网 时间:2024/05/07 12:42
Another kind of Fibonacci
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2428 Accepted Submission(s): 963
Problem Description
As we all known , the Fibonacci series : F(0) = 1, F(1) = 1, F(N) = F(N - 1) + F(N - 2) (N >= 2).Now we define another kind of Fibonacci : A(0) = 1 , A(1) = 1 , A(N) = X * A(N - 1) + Y * A(N - 2) (N >= 2).And we want to Calculate S(N) , S(N) = A(0)2 +A(1)2+……+A(n)2.
Input
There are several test cases.
Each test case will contain three integers , N, X , Y .
N : 2<= N <= 231 – 1
X : 2<= X <= 231– 1
Y : 2<= Y <= 231 – 1
Each test case will contain three integers , N, X , Y .
N : 2<= N <= 231 – 1
X : 2<= X <= 231– 1
Y : 2<= Y <= 231 – 1
Output
For each test case , output the answer of S(n).If the answer is too big , divide it by 10007 and give me the reminder.
Sample Input
2 1 1 3 2 3
Sample Output
6196
Author
wyb
Source
HDOJ Monthly Contest – 2010.02.06
Recommend
wxl
此题关键就在于构造矩阵,构造的矩阵如下:
很显然我们先推s[n]=s[n-1]+A[n]^2;A[n]^2=x*x*A[n-1]^2+y*y*A[n-2]^2+2*x*y*A[n-1][n-2];于是我们发现又涉及到了A[n-1]*A[n-2]。A[n]*A[n-1]=x*A[n-1]^2+y*A[n-1]*A[n-2];
很显然我们先推s[n]=s[n-1]+A[n]^2;A[n]^2=x*x*A[n-1]^2+y*y*A[n-2]^2+2*x*y*A[n-1][n-2];于是我们发现又涉及到了A[n-1]*A[n-2]。A[n]*A[n-1]=x*A[n-1]^2+y*A[n-1]*A[n-2];
|2 1 1 1| |1 0 0 0| = |f(n) A(n)^2 A(n)*A(n-1) A(n-1)^2|
|0 0 0 0| * |x^2 x^2 x 1| = | 0 0 0 0 |
|0 0 0 0| |2*x*y 2*x*y y 0| = | 0 0 0 0 |
|0 0 0 0| |y^2 y^2 0 0| = | 0 0 0 0 |
AC代码:
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxm = 100002;const int maxn = 100002;const int inf = 0x3f3f3f3f;int n, m, k;struct node {int x, y, w;};node edge[maxm*2];int book[maxn];int main(){while(~scanf("%d%d%d", &n, &m, &k)) {memset(book, 0, sizeof(book));int i;for(i=0; i<m; ++i)scanf("%d%d%d", &edge[i].x, &edge[i].y, &edge[i].w);if(!k) {printf("-1\n");continue;}int a;for(i=0; i<k; ++i) {scanf("%d", &a);book[a] = 1;}int ans = inf;for(i=0; i<m; ++i) {if(book[edge[i].x] + book[edge[i].y] == 1) {ans = min(ans, edge[i].w);}}if(ans == inf)printf("-1\n");else printf("%d\n", ans);}}/*|2 1 1 1| |1 0 0 0| = |f(n) A(n)^2 A(n)*A(n-1) A(n-1)^2||0 0 0 0| * |x^2 x^2 x 1| = | 0 0 0 0 ||0 0 0 0| |2*x*y 2*x*y y 0| = | 0 0 0 0 ||0 0 0 0| |y^2 y^2 0 0| = | 0 0 0 0 |*/
0 0
- HDU3306 -- Another kind of Fibonacci 构造矩阵然后矩阵快速幂
- hdu3306 Another kind of Fibonacci 构造矩阵
- hdu3306 Another kind of Fibonacci(构造矩阵)
- hdu3306--Another kind of Fibonacci(矩阵快速幂)
- Another kind of Fibonacci(hdu3306)矩阵快速幂
- 矩阵——hdu3306 Another kind of Fibonacci
- hdu 3306 Another kind of Fibonacci 矩阵快速幂
- hdu 3306 Another kind of Fibonacci ---矩阵快速幂
- HDU 3306 Another kind of Fibonacci(矩阵快速幂)
- hdu 3306 Another kind of Fibonacci(矩阵快速幂)
- HDU - 3306 Another kind of Fibonacci 矩阵快速幂
- [HDU 3306] Another kind of Fibonacci · 矩阵快速幂
- hdoj 3306 Another kind of Fibonacci 【矩阵快速幂】
- HDU 3306 Another kind of Fibonacci (矩阵快速幂)
- hdu 3306 Another kind of Fibonacci(矩阵快速幂)
- HDU3306 Another kind of Fibonacci
- hdu3306 Another kind of Fibonacci
- hdu3306 Another kind of Fibonacci
- 学习Linux C过程中要解决的问题
- 数据结构课程总结
- 蓝桥杯BASIC-10(十进制转十六进制)
- Core Graphics坐标系问题
- Android 开发:由模块化到组件化(一)
- HDU3306 -- Another kind of Fibonacci 构造矩阵然后矩阵快速幂
- hbuild 快捷键
- Hibernate之关系映射的两种方式(xml映射、annotation注解映射)
- 个人觉得有收藏价值的网址
- acm谁是最好的Coder
- FreeRTOS学习——协同程序
- Raspberry Pi 3
- 蓝桥杯BASIC-11(十六进制转十进制)
- android 开发零起步学习笔记(二十):Android开发笔记:如何使用预先制作好的SQLite数据库(整理自网络)