LightOJ 1096 - nth Term 矩阵快速幂
2024-08-28 00:51:20
http://www.lightoj.com/volume_showproblem.php?problem=1096
题意:\(f(n) = a * f(n-1) + b * f(n-3) + c, if(n > 2) f(n)= 0, if(n ≤ 2) \)
思路:给出了递推式,构造下4X4矩阵就好。
/** @Date : 2016-12-19-18.55
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version :
*/ #include<bits/stdc++.h>
#define LL long long
#define PII pair
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 1e5+20;
const double eps = 1e-8;
const LL mod = 1e4 + 7; struct matrix
{
LL mt[4][4];
void init()
{
for(int i = 0; i < 4; i++)
for(int j = 0; j < 4; j ++)
mt[i][j] = 0;
}
void cig()
{
for(int i = 0; i < 4; i++)
mt[i][i] = 1;
}
}; matrix mul(matrix a, matrix b)
{
matrix c;
c.init();
for(int i = 0; i < 4; i++)
for(int j = 0; j < 4; j++)
for(int k = 0; k < 4; k++)
{
c.mt[i][j] += a.mt[i][k] * b.mt[k][j];
c.mt[i][j] %= mod;
}
return c;
} matrix fpow(matrix a, LL n)
{
matrix r;
r.init();
r.cig();
while(n > 0)
{
if(n & 1)
r = mul(r, a);
a = mul(a, a);
n >>= 1;
}
return r;
} LL fun(LL a, LL b, LL c, LL n)
{
if(n < 3)
{
return 0;
}
matrix base;
base.init();
base.mt[0][0] = a;
base.mt[0][2] = b;
base.mt[0][3] = c;
base.mt[1][0] = 1;
base.mt[2][1] = 1;
base.mt[3][3] = 1;
base = fpow(base, n - 3);
LL ans = (base.mt[0][0] * c + base.mt[0][3]) % mod;
return ans;
} int main()
{
int T;
cin >> T;
int cnt = 0;
while(T--)
{
LL n, a, b, c;
scanf("%lld%lld%lld%lld", &n, &a, &b, &c);
LL ans = fun(a, b, c, n);
printf("Case %d: %lld\n", ++cnt, ans);
}
return 0;
}
最新文章
- mybatis-generator 1.3.5支持流式 fluent 方法
- JavaScript实现在textbox输入时自动去数据库匹配并找出类似值列出,选择后记得将值填入本textbox及下一个textbox
- 11个实用经典的SQL小贴士
- sublime text3 配置插件包记录
- 处理MVC中默认的Json方法返回时间的问题
- dll signing issue
- HTML5 实现拍照上传
- 2017-06-22初识python
- Ubuntu16.04更新python3.5到python3.7
- 3.JAVA基础复习——JAVA中的类与对象
- 【洛谷P1483】序列变换
- mybatis的一种批量更新方法【我】
- 微信调试工具测试时有时候复制URL没有corpid解决
- html文件form表单action调用servlet连接mysql数据库实例
- Java分布式锁的三种实现方案(redis)
- openresty + lua 2、openresty 连接 redis,实现 crud
- selenium-百度搜索框输入后,定位联想下拉框元素
- leetcode第一刷_N-Queens
- BZOJ.1036 [ZJOI2008]树的统计Count ( 点权树链剖分 线段树维护和与最值)
- linux快速复制大量小文件方法 nc+tar【转】