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;
}

最新文章

  1. mybatis-generator 1.3.5支持流式 fluent 方法
  2. JavaScript实现在textbox输入时自动去数据库匹配并找出类似值列出,选择后记得将值填入本textbox及下一个textbox
  3. 11个实用经典的SQL小贴士
  4. sublime text3 配置插件包记录
  5. 处理MVC中默认的Json方法返回时间的问题
  6. dll signing issue
  7. HTML5 实现拍照上传
  8. 2017-06-22初识python
  9. Ubuntu16.04更新python3.5到python3.7
  10. 3.JAVA基础复习——JAVA中的类与对象
  11. 【洛谷P1483】序列变换
  12. mybatis的一种批量更新方法【我】
  13. 微信调试工具测试时有时候复制URL没有corpid解决
  14. html文件form表单action调用servlet连接mysql数据库实例
  15. Java分布式锁的三种实现方案(redis)
  16. openresty + lua 2、openresty 连接 redis,实现 crud
  17. selenium-百度搜索框输入后,定位联想下拉框元素
  18. leetcode第一刷_N-Queens
  19. BZOJ.1036 [ZJOI2008]树的统计Count ( 点权树链剖分 线段树维护和与最值)
  20. linux快速复制大量小文件方法 nc+tar【转】

热门文章

  1. 阅读笔记《我是一只IT小小鸟》
  2. 大白话Docker入门(一)
  3. mysql中用户和权限
  4. Java NIO:IO与NIO的区别 -阿里面试题
  5. [C/C++] 指针数组和数组指针
  6. LoadRunner脚本增强技巧之手动关联
  7. 单源最短路径spfa模板(pascal)洛谷P3371
  8. 【Java并发编程】之三:线程挂起、恢复与终止的正确方法
  9. 计算机网络:A、B、C、D和E类IP地址
  10. Cornfields POJ - 2019(二维RMQ板题)