HDU3306 -- Another kind of Fibonacci 构造矩阵然后矩阵快速幂
2016-12-14 20:23
204 查看
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
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
6
196
Author
wyb
Source
HDOJ Monthly Contest – 2010.02.06
Recommend
wxl
此题关键就在于构造矩阵,构造的矩阵如下:
很显然我们先推s
=s[n-1]+A
^2;A
^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
*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 |
*/
相关文章推荐
- 水面无人艇局部危险避障算法研究 结论
- 第十六周项目1-(5)归并排序
- 成为自己想成为的人
- android 存储图片到data目录和读取data目录下的图片
- 访问控制列表
- JAVA 入门学习之路-apache-dbutils-BeanUtils使用详解。
- 个人记录-LeetCode 47. Permutations II
- scrapy使用
- 【java】事件与观察者模式
- arduino学习系列——串口通信
- linux下设置tomcat脚本启动
- Android 自定义View 之 触摸消息派发
- 其实没有以后
- Linux 命令行模式 你需要知道的那些事
- Android开发——ViewPage制作滑动导航界面
- MD 色板参考
- mysql数据库引擎及区别
- tomcat管理页面登陆问题
- spring mvc超强的json支持,你自己根本不需要额外的配置。spring mvc都给你配置好了!!!
- 晕头转向的一天