题目连接:http://acm.csust.edu.cn/problem/4044
博客园食用链接: https://www.cnblogs.com/lonely-wind-/p/13941879.html

Description

呜呜呜,辉夜大小姐生病了,学生会的三人正在决定由谁去探病,藤原书记知道辉夜大小姐生病后会变的非常可爱,所以她非常想要获得这次探病的机会,于是她提出了一个数学游戏,显然,向白银和石上挑战数学游戏是非常的愚蠢的,但是这次不一样,他找到了秀知院数学第一的你来帮她作弊,这次的游戏的内容和斐波那契数列有关。

斐波那契数列指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……0、1、1、2、3、5、8、13、21、34、……0、1、1、2、3、5、8、13、21、34、…… 在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1,F(n)=F(n−1)+F(n−2)F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)F(0)=0,F(1)=1,F(n)=F(n−1)+F(n−2)

这次游戏分为两个问题:

首先给定一个 nnn

问题一:你要在斐波那契数列中选择任意个不重复的数,使这几个数的和等于 nnn ,如果存在合法的方案,请输出 DarlingDarlingDarling , 否则输出 ohayouo~ha~youo ha you 。

问题二:你可以在 1,2,41, 2, 41,2,4 这三个数中每个数选择任意多个,使这些数的和为 nnn ,请计算出有多少种选择的方案数,这个方案数可能很大,请把结果对 998244353998244353998244353 取模后输出。注意,数字先后选择顺序不同也代表不同方案数,请看样例解释。

这对藤原书记来说太难了,所以请你尽快计算出答案,使她可以去探病。

input

输入第一行一个整数TTT表示数据组数。

接下来TTT行每行一个整数表示nnn。

1≤T≤20,1≤n≤100000000001\le T\le 20, 1\le n\le 100000000001≤T≤20,1≤n≤10000000000。

output

每组数据都输出222行,表示两个问题的答案。

Sample Input 1
2
2
4
Sample Output 1
Darling
2
Darling
6

Hint

对于第一组数据:

第一个问题,PPH直接跳一步且步长为222米即可。

第二个问题,PPH有两种方案:{1,1},{2}\{1,1\},\{2\}{1,1},{2}。

对于第二组数据:

第一个问题,PPH先跳一步且步长为111米,再跳一步步长为333米即可。

第二个问题,PPH有六种方案:{1,1,1,1},{1,1,2},{1,2,1},{2,2},{2,1,1},{4}\{1,1,1,1\},\{1,1,2\},\{1,2,1\},\{2,2\},\{2,1,1\},\{4\}{1,1,1,1},{1,1,2},{1,2,1},{2,2},{2,1,1},{4}。

emmm,刚开始的时候看到这题还感觉出的太简单了,这不是送分嘛。。。后来瞄了一眼数据范围,emmm,挺好的,加了个算法,虽然挺裸的,但没学过还真不知道怎么搞。

首先暴力的写法很简单,就是一个递推式子:dp[i]=dp[i−1]+dp[i−2]+dp[i−4]dp[i]=dp[i-1]+dp[i-2]+dp[i-4]dp[i]=dp[i−1]+dp[i−2]+dp[i−4],对于第一问其实我们可以直接得出Darling,因为所有的整数都可以用斐波那契数列来表示的,所以并不会有什么no的方案。

这题关键的地方在于求解方案数,也就是第二问。我们知道快速求一个递推式可以使用矩阵来加速它,那么直接上手就完事了。由于递推式中有到i-4这里,所以我们需要用到4维矩阵,那么也就是构建一个方阵A使得
A⋅(fn−1fn−2fn−3fn−4)=(fnfn−1fn−2fn−3)A\cdot \begin{pmatrix} f_{n-1}\\f_{n-2} \\ f_{n-3} \\ f_{n-4} \end{pmatrix}=\begin{pmatrix} f_n\\ f_{n-1} \\ f_{n-2} \\ f_{n-3} \end{pmatrix}A⋅⎝⎜⎜⎛​fn−1​fn−2​fn−3​fn−4​​⎠⎟⎟⎞​=⎝⎜⎜⎛​fn​fn−1​fn−2​fn−3​​⎠⎟⎟⎞​
那么我们很容易得到
A=(1101100001000010)A=\begin{pmatrix} 1 & 1 & 0 & 1\\ 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0 \end{pmatrix}A=⎝⎜⎜⎛​1100​1010​0001​1000​⎠⎟⎟⎞​

于是矩阵快速幂写一写,实际上也就是个普通的快速幂加上一个矩阵乘法而已。

以下是AC代码:

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const int mod=998244353;struct Mat
{ll mat[5][5];Mat(){memset(mat,0,sizeof mat);}
};
ll dp[6];Mat mult(Mat a,Mat b)
{Mat ans;for (int i=1; i<=4; i++)for (int j=1; j<=4; j++)for (int k=1; k<=4; k++)ans.mat[i][j]=(ans.mat[i][j]+a.mat[i][k]*b.mat[k][j])%mod;return ans;
}Mat qick(Mat a,ll b)
{Mat ans;ans.mat[1][1]=ans.mat[2][2]=ans.mat[3][3]=ans.mat[4][4]=1;while (b){if (b&1) ans=mult(ans,a);b>>=1;a=mult(a,a);}return ans;
}int main(int argc, char const *argv[])
{int t;dp[1]=1; dp[2]=2; dp[3]=3; dp[4]=6;scanf ("%d",&t);while (t--){ll n;scanf ("%lld",&n);printf ("Darling\n");if (n<=4) {printf ("%lld\n",dp[n]); continue;}Mat a;a.mat[1][1]=a.mat[1][2]=a.mat[1][4]=1;a.mat[2][1]=a.mat[3][2]=a.mat[4][3]=1;Mat ans=qick(a,n-4);Mat base;base.mat[1][1]=dp[4]; base.mat[2][1]=dp[3]; base.mat[3][1]=dp[2]; base.mat[4][1]=dp[1];ans=mult(ans,base);printf("%lld\n",ans.mat[1][1]);}return 0;
}

CSUSTOJ-藤原书记想要探病(简单矩阵快速幂)相关推荐

  1. POJ3070矩阵快速幂简单题

    题意:       求斐波那契后四位,n <= 1,000,000,000. 思路:        简单矩阵快速幂,好久没刷矩阵题了,先找个最简单的练练手,总结下矩阵推理过程,其实比较简单,关键 ...

  2. CSUSTOJ-藤原书记的佩斯(简单数学)

    题目连接:http://acm.csust.edu.cn/problem/4056 博客园食用链接: https://www.cnblogs.com/lonely-wind-/p/13941868.h ...

  3. 矩阵快速幂的最简单用法

    矩阵快速幂 链接:https://ac.nowcoder.com/acm/contest/1168/K 来源:牛客网 题目描述 这个勇者明明超强却过分慎重,勇者龙宫院圣哉与n名冒险者一起去讨伐神秘魔物 ...

  4. HDU1757(矩阵快速幂+简单的矩阵构造)

    很简单的矩阵构造看似很麻烦,其实直接写就ok了. ⎡⎣⎢⎢⎢⎢f(n)f(n−1)....f(n−9)⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢a100....0b0100c0010d0000e0000f00 ...

  5. FZU 1683 纪念SlingShot (简单的矩阵快速幂)

     纪念SlingShot Description 已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5,对于给 ...

  6. 计蒜客 简单的快速幂

    题目传送门 #include<bits/stdc++.h> using namespace std;typedef long long LL; const int maxn=1000000 ...

  7. 简单计数(构造矩阵 矩阵快速幂优化dp)

    传送门 示例1 输入 1 1 输出 0 分析: 代码: #include <bits/stdc++.h>using namespace std; typedef long long ll; ...

  8. [画风突变] 藤原千花专属相册,C语言制作书记专属电子相册!

    前言 一款自己制作的电子相册不仅富有创意,而且能够最大可能的满足己需,今天小编带着大家制作的就是藤原千花的电子相册.要是你愿意,你也可以把你和你对象的点滴放进去哦,弄点爱情宣言什么的都是没什么问题. ...

  9. dev gridcontrol 单元格内容复制_Excel中的复制粘贴,不只是你想的那么简单的

    白日何短短,百年苦易满.苍穹浩茫茫,万劫太极长.麻姑垂两鬓,一半已成霜.天公见玉女,大笑亿千场.吾欲揽六龙,回车挂扶桑.北斗酌美酒,劝龙各一觞.富贵非所愿,与人驻颜光. --[唐]李白<短歌行& ...

最新文章

  1. 使用SAP云平台Mobile Service开发移动应用
  2. 判断Python输入是否为数字
  3. 有哪些好的刷题网站?2018年最受欢迎的编程挑战网站
  4. supermap iserver端口介绍
  5. oracle byte 转string,C# 中 byte 转化成string
  6. strace/linux
  7. ccf csp认证试题
  8. JS设计模式 - 单例模式
  9. win10怎么取消小箭头_已取消到该网页的导航,小编教你网页提示已取消到该网页的导航怎么办...
  10. 增值税专用发票 计算机 分类,增值税计算机稽核系统发票比对操作规程(试行)...
  11. android优化大师下载最新版,安卓优化大师
  12. java教学视频毕向东_集合3--毕向东java基础教程视频学习笔记
  13. Ant Design mentions组件更改样式
  14. 组合数学在计算机中的应用,组合数学在计算机科学中的应用
  15. EM算法-数学原理及其证明
  16. 两组字符串去重/两个列表去重
  17. mysql 增删改查时的错误解决方法大全
  18. 安装Office2010提示需要安装MSXML版本6.10.1129.0的解决方法,超简单,亲测可用
  19. [附源码]Python计算机毕业设计SSM基于大数据的高校国有固定资产管理及绩效自动评价系统(程序+LW)
  20. 解决docker打包Eureka注册中心,其他服务无法注册问题

热门文章

  1. 两台计算机互联方案,如何让两台电脑直接用网线互联.docx
  2. Django——关于related查找
  3. 以太坊源码分析:fetcher模块和区块传播
  4. h5唤起app,清除timeout
  5. Google基本查询语法
  6. 面试时,可以问面试官问题总结
  7. 禁止input密码自动填充及浏览器记住密码完整解决方案
  8. ctfshow crypto funnyrsa3 RSA之dp泄露
  9. JavaScript基础随笔
  10. matlab regress 非线性,MATLAB用regress作多元非线性回归