hdu6198 number number number【找规律+矩阵快速幂】
来源:互联网 发布:php计算提交数的和 编辑:程序博客网 时间:2024/05/30 23:41
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6198
题意:给你一段斐波那契数列,有个关于good number的定义,就是给你一个k,如果对于一个n,能由k项斐波那契数相加来表示,那么这个数就叫good number,否则就是bad number,现在输入k,让你求最小的bad number
解析:这种题型,看着就像递推题,手写了前几项,然后和原本的菲波那切数比,只是其中的某一项-1,即第2*(k+1)+1项-1,由于k很多,所以用矩阵快速幂来求出这一项,有一个坑点就是-1以后有可能是负数,所以要在最后输出的时候判一下
#include <bits/stdc++.h>using namespace std;const int mod = 998244353;typedef long long ll;struct martix{ ll a[4][4]; int n,m; martix() {} martix(int _n,int _m) { n = _n,m = _m; memset(a,0,sizeof(a)); } martix operator * (const martix &b)const { martix res(n,b.m); for(int i=0;i<n;i++) { for(int j=0;j<b.m;j++) { for(int k=0;k<m;k++) res.a[i][j] = (res.a[i][j]+a[i][k]*b.a[k][j]%mod)%mod; } } return res; } void print() { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) printf("%I64d ",a[i][j]); puts(""); } }};martix qpow(martix x,int n){ martix res(x.n,x.n); for(int i=0;i<x.n;i++) res.a[i][i] = 1; while(n) { if(n&1) res = res*x; x = x*x; n >>= 1; } return res;}int main(void){ int n; while(~scanf("%d",&n)) { int tt = 2*(n+1); martix op(2,2); martix ans(2,1); op.a[0][0] = 1;op.a[0][1] = 1; op.a[1][0] = 1;op.a[1][1] = 0; ans.a[0][0] = 1;ans.a[1][0] = 0; op = qpow(op,tt); ans = op*ans; printf("%I64d\n",(ans.a[0][0]-1+mod)%mod); } return 0;}
阅读全文
0 0
- hdu6198 number number number(找规律+矩阵快速幂)
- hdu6198 number number number【找规律+矩阵快速幂】
- 【2017沈阳网络赛】1005 hdu6198 number number number 找规律+矩阵快速幂
- HDU6198 number number number 矩阵快速幂
- HDU 6198 number number number【找规律+矩阵快速幂】
- hdu6198 number number number(矩阵快速幂模板题)
- 【HDU6198 2017 ACM ICPC Asia Regional Shenyang Online E】【找规律 + 矩阵快速幂 + 粗略证明】number number number 无法用K
- HDU-6198 number number number(打表找规律、矩阵快速幂)
- HDU 6198 number number number(规律+矩阵快速幂)
- 【打表找规律+矩阵快速幂】number number number HDU
- 【HDU 6198】number number number 【规律+矩阵快速幂】
- hdu6198(矩阵快速幂+找规律)
- HDU6198 number number number
- HDU6198 number number number
- HDU6198-number number number
- HDU6198 number number number
- Hdu6198 num num num 找规律+矩阵快速幂
- ICPC2017网络赛(沈阳)1005&HDU6198 number (矩阵+快速幂)
- PAT A1119. Pre- and Post-order Traversals (30)
- hdu 5536 01字典树的删减
- Pycharm使用技巧:Split Vertically/Horizontally(垂直/水平拆分窗口)
- JS中使用var fso = new ActiveXObject("LoadingOilICCard.ICCardActiveX");报automation服务器不能创建对象
- Win7系统如何设置任务栏按钮始终合并
- hdu6198 number number number【找规律+矩阵快速幂】
- Apache和tomcat
- [C++::STL]之stcak的用法
- 树莓派ssh连接 突然就断了
- Android Framework层的理解
- 开始刷博弈。。
- Apache和 nginx
- boost::filesystem::directory_iterator d_iterator debug下异常
- 完全优化MySQL数据库性能的八大巧方法