hdu 3306 Another kind of Fibonacci 矩阵快速幂
2024-08-27 14:37:03
参考了某大佬的
我们可以根据(s[n-2], a[n-1]^2, a[n-1]*a[n-2], a[n-2]^2) * A = (s[n-1], a[n]^2, a[n]*a[n-1], a[n-1]^2)
能够求出关系矩阵
|1 0 0 0 |
A = |1 x^2 x 1 |
|0 2*x*y y 0 |
|0 y^2 0 0 |
这样就A了!
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long ll;
const ll Mod = 10007;
const int N = 5;
int msize; struct Mat
{
ll mat[N][N];
}; Mat operator *(Mat a, Mat b)
{
Mat c;
memset(c.mat, 0, sizeof(c.mat));
for(int k = 0; k < msize; ++k)
for(int i = 0; i < msize; ++i)
if(a.mat[i][k])
for(int j = 0; j < msize; ++j)
if(b.mat[k][j])
c.mat[i][j] = (a.mat[i][k] * b.mat[k][j] + c.mat[i][j])%Mod;
return c;
} Mat operator ^(Mat a, ll k)
{
Mat c;
memset(c.mat,0,sizeof(c.mat));
for(int i = 0; i < msize; ++i)
c.mat[i][i]=1;
for(; k; k >>= 1)
{
if(k&1) c = c*a;
a = a*a;
}
return c;
} int main()
{
ll n,x,y;
msize = 4;
while(~scanf("%I64d%I64d%I64d",&n,&x,&y))
{
Mat A;
A.mat[0][0] = 1, A.mat[0][1] = 1, A.mat[0][2] = 0, A.mat[0][3] = 0;
A.mat[1][0] = 0, A.mat[1][1] = x*x%Mod, A.mat[1][2] = 2*x*y%Mod, A.mat[1][3] = y*y%Mod;
A.mat[2][0] = 0, A.mat[2][1] = x, A.mat[2][2] = y, A.mat[2][3] = 0;
A.mat[3][0] = 0, A.mat[3][1] = 1, A.mat[3][2] = 0, A.mat[3][3] = 0;
A = A^n;
printf("%I64d\n", (A.mat[0][0] + A.mat[0][1] + A.mat[0][2] + A.mat[0][3])%Mod);
}
return 0;
}
最新文章
- Struts 笔记 内部资料 请勿转载 谢谢合作
- EntityFrameWork使用MySql数据库分页的BUG
- 基于EasyUi ComBotree树修改 父节点选择问题
- PowerDesigner中Table视图怎样同时显示Code和Name
- Fitbit Flex 智能手环佩戴心得 主要说说过敏
- 在tp中使用mongo数据库并建立连接的实例
- .net 开发的奇淫巧计
- Android 设置进度条背景
- P142-1
- 创建指定日期java Date对象
- CentOS增加硬盘
- eclipse中servers(服务器)的配置
- 用javascript获取屏幕高度和宽度等信息
- 一些.net开源项目
- ThinkPHP 3 的CURD管理用户信息 修改和删除
- php Redis函数使用总结(string,hash,list, set , sort set )
- FJOI2017 RP++
- Element-ui表格选中回显
- 第五篇 - Selenium突破反爬获取qq邮件标题
- 记一次autofac+dapper+mvc的框架搭建实践
热门文章
- Windows10查看电脑的USB接口是2.0还是3.0
- maven build和push image中遇到的坑(学习过程记录)
- 基于Centos7.4搭建prometheus+grafana+altertManger监控Spring Boot微服务(docker版)
- 如何在idea中将项目生成API文档(超详细)(Day_32)
- Day029 JDK8中新日期和时间API (二)
- Git 分支基本命令
- 根据swagger.json生成flutter model,暂无空安全支持
- Spring Mvc Long类型精度丢失
- 向Relay添加算子
- Python API vs C++ API of TensorRT