多校联合集训BIT专场 HDU 3493 The Little Architect
(2010-08-13 11:25:46)
标签:
多校联合集训hdu3493it |
分类: 杂题 |
解题报告:
矩阵快速幂。
公式的推理貌似很复杂,官方解题报告没怎么看明白,队友看懂后我就直接按照公式写的。主要是回顾一下构造矩阵的方法和快速幂的精简写法。
最终公式是:F(n) = 5F(n-1) – 7F(n-2) + 4F(n-3)
一共4个参数,那么错开写,一边3个参数,每个参数相差1;如下
F(n - 1)
F(n -
2)
F(n - 3)
然后对于每一对,构造矩阵,例如,
对于第一行的F(n - 1) 和 F(n),有:
F(n) = 5F(n-1) – 7F(n-2) + 4F(n-3)
写出来就是
5
对于第二行有F(n - 1) = F(n - 1)
写出来:
5
1
同理第三行:
5
1
0
即经过一个矩阵的乘法,可以从n - 1得到n。从F(4)开始,容易得到
5 -7
4
1 0
0 1
代码如下:(快速幂部分的写法很经典)
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define mo 9997
int n, ans[3][3], tmp[3][3], x[3][3], e[3][3] = {{5, -7, 4}, {1, 0,
0}, {0, 1, 0}};
int sta[] = {0, 1, 2, 6, 19};
void jeo(int a[][3], int b[][3])
{
}
void jeogia(int n)
{
}
int main()
{
}