HDU 5950:Recursive sequence(矩阵快速幂)
2024-08-21 20:12:10
http://acm.hdu.edu.cn/showproblem.php?pid=5950
题意:给出 a,b,n,递推出 f(n) = f(n-1) + f(n-2) * 2 + n ^ 4. f(1) = a, f(2) = b.
思路:在比赛时候知道是矩阵快速幂,可是推不出矩阵.那个n^4不知道怎么解决。结束后问其他人才知道要构造一个7 * 7的矩阵,而不是3 * 3的..
转自:http://blog.csdn.net/spring371327/article/details/52973534
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
#define N 1010
#define INF 0x3f3f3f3f
#define MOD 2147493647
typedef long long LL; struct matrix
{
LL a[][]; void init() {
memset(a, , sizeof(a));
for(int i = ; i < ; i++) a[i][i] = ;
} matrix operator * (matrix b) {
matrix ans;
LL tmp;
for(int i = ; i < ; i++) {
for(int j = ; j < ; j++) {
ans.a[i][j] = ;
for(int k = ; k < ; k++) {
tmp = a[i][k] * b.a[k][j] % MOD;
ans.a[i][j] = (ans.a[i][j] + tmp % MOD) % MOD;
}
}
}
return ans;
}
}; matrix q_pow(matrix a, LL b)
{
matrix ans;
ans.init();
while(b) {
if(b & ) ans = ans * a;
b >>= ;
a = a * a;
}
return ans;
} int main()
{
matrix mo;
memset(mo.a, , sizeof(mo.a));
mo.a[][] = ;
mo.a[][] = ; mo.a[][] = , mo.a[][] = , mo.a[][] = , mo.a[][] = , mo.a[][] = , mo.a[][] = ;
mo.a[][] = , mo.a[][] = , mo.a[][] = , mo.a[][] = , mo.a[][] = ;
mo.a[][] = , mo.a[][] = , mo.a[][] = , mo.a[][] = ;
mo.a[][] = , mo.a[][] = , mo.a[][] = ;
mo.a[][] = , mo.a[][] = ;
mo.a[][] = ;
int t;
scanf("%d", &t);
while(t--) {
long long n, a, b;
scanf("%I64d%I64d%I64d", &n, &a, &b);
if(n == ) printf("%I64d\n", a);
else if(n == ) printf("%I64d\n", b);
else {
matrix ans = q_pow(mo, n - );
LL sum = ;
sum = (sum + ans.a[][] * a) % MOD;
sum = (sum + ans.a[][] * b) % MOD;
sum = (sum + ans.a[][] * ) % MOD;
sum = (sum + ans.a[][] * ) % MOD;
sum = (sum + ans.a[][] * ) % MOD;
sum = (sum + ans.a[][] * ) % MOD;
sum = (sum + ans.a[][]) % MOD;
printf("%I64d\n", sum);
}
}
return ;
}
最新文章
- [LeetCode]444. Sequence Reconstruction
- 线性控制原理——PID算法应用
- [Nodejs]十分钟快速编写简单静态文件服务器
- Unity开发游戏 flapybird 无广告老马版分享
- MVC显示详细记录Without Entity Framework
- 虚拟机centos6.5 --VirtualBox设置全屏
- 桥接模式(Bridge Pattern)
- 基于redis的IP地址快速查询
- List,Set,Map三种接口的区别
- [C# 设计模式] Adapter - 适配器模式(两种)
- c#一步一步实现ORM
- python开发 *进程数据隔离.守护进程,进程同步工具 * 180725
- PHP使用http_build_query()构造URL字符串的方法(可将POST参数组转换拼接成GET请求链接)
- TSFDEVTY
- Spring RedisTemplate操作-发布订阅操作(8)
- Entity Framework 无法加载指定的元数据资源。
- 利用canvas绘制序列帧动画
- Golang cron 定时任务使用
- CCF CSP 201403-2 窗口
- cpu 核数及逻辑数统计
热门文章
- oracle启动关闭命令
- Hadoop学习笔记: 安装配置Hadoop
- Java基础之序列化对象——将对象写入到文件中(SerializeObjects)
- iOS 提交代码出现提示弹出框显示 “A commit message is required to perform this operation.Enter a commit message and try again.“
- NSCoding归档
- [原创]java WEB学习笔记87:Hibernate学习之路-- -映射 继承关系(subclass , joined-subclass,union-subclass )
- [转] 多线程 《深入浅出 Java Concurrency》目录
- <;c:if>;标签的使用
- android复习第二天------布局
- Android 播放视频文件