"现在给大家展示一波教科书般的亵渎" "扭了扭了"

炉石传说是一款比较火的卡牌游戏,不同的卡牌间可以打出许多不可思议的配合。

炉石传说的战斗大部分由随从来完成。每个随从都有血量。当随从血量为0时,随从就会死亡。

"恐怖的奴隶主"是一个有3血的随从。他的特效是:每当该随从收到伤害且没有死亡时,召唤一个恐怖的奴隶主。也就是说,一个3血或2血的奴隶主,受到1点伤害后,都会召唤一个新的3血的奴隶主。而一个1血的奴隶主如果受到了1点伤害,就会直接死亡而不会召唤奴隶主。

"亵渎"是一张法术牌。其效果是:对全场随从造成1点伤害,如果有随从被亵渎的伤害打死,就再次施放亵渎。如果场上有一个1血一个2血的随从,亵渎会对全场打1,杀死那个1血随从,再全场打1,杀死那个2血的随从,再对全场打1(虽然此时场上已经没有随从了)

可以看出,奴隶主和亵渎的效果都是递归定义的。两张牌只要配合起来,就可能造成无限的递归。炉石的程序员肯定不希望游戏发生这种情况,他们偷偷给亵渎加了一个使用次数限制,亵渎在自我递归一定次数后就会停止了。

现在,假设你是一个炉石主播。你的场上有$$$a_1$$$个1血的奴隶主,$$$a_2$$$个2血的奴隶主,$$$a_3$$$个3血的奴隶主,亵渎在释放$$$n$$$次后就会停止递归。游戏中随从的数量不做限制,可以同时有无限个随从出现在游戏里。现在你释放了一次亵渎,游戏陷入了漫长的结算过程。这个时候,不断地有弹幕在问你:"主播主播,一共死了多少个奴隶主啊?"你决定用你高超的编程技术来回答这个问题。

Input

输入共一行。这一行包括四个数 $$$a_1,a_2,a_3,n (0 \leq a_1,a_2,a_3 \leq 10^9, 2 \leq n \leq 10^{18})$$$分别表示1血奴隶主的个数、2血奴隶主的个数、3血奴隶主的个数、亵渎的最大释放次数。

Output

输出共一行,包含一个整数(对$$$10^9+7$$$取模) ,表示死掉奴隶主的个数。

Examples

Input

1 1 1 4

Output

5

Input

1 0 1 5

Output

1

用到矩阵快速幂+计算斐波那契数列

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll MOD = 1e9+7;
ll a1,a2,a3,n;
struct sq
{ll sq[2][2];void mes(){memset(sq,0,sizeof(sq));}
};sq operator *(sq a,sq b)
{sq tmp;tmp.mes();for(int i=0; i<2; i++){for(int j=0; j<2; j++){for(int k=0; k<2; k++){tmp.sq[i][j]=(tmp.sq[i][j]+a.sq[i][k]*b.sq[k][j])%MOD;}}}return tmp;
}
ll fi(ll n)
{sq ans,m;ans.mes();m.mes();m.sq[0][0]=m.sq[0][1]=m.sq[1][0]=1;m.sq[1][1]=0;ans.sq[0][0]=ans.sq[1][1]=1;ans.sq[0][1]=ans.sq[1][0]=0;while(n){if(n&1){ans=ans*m;}m=m*m;n>>=1;}return ans.sq[0][1]%MOD;
}
int main()
{cin>>a1>>a2>>a3>>n;if(a1 && a2 && a3){if(n == 2){cout<<(a1%MOD + a2%MOD)%MOD<<endl;}else if(n == 3){cout<<(a1%MOD + a2%MOD + a3%MOD)%MOD<<endl;}else{ll b1 = fi(n-1);ll b2 = fi(n)-1;//cout<<b1<<" "<<b2<<endl;ll ans = (a1%MOD + (a2%MOD*b1)%MOD + (a3%MOD*b2)%MOD)%MOD;cout<<ans<<endl;//cout<<(a1%MOD + (a2%MOD)*(fi(n-1)%MOD)%MOD +((fi(n)-1)%MOD *(a3%MOD))%MOD )%MOD;}}else if(a1 == 0){cout<<0<<endl;}else if(a2 == 0){cout<<a1%MOD<<endl;}else if(a3 == 0){cout<<(a1%MOD+a2%MOD)%MOD<<endl;}return 0;
}

A - 【深蓝】教科书般的亵渎 (Gym - 102072A )(矩阵快速幂+计算斐波那契数列)相关推荐

  1. 矩阵快速幂及斐波那契数列模板

    本篇博客先给出矩阵快速幂以及利用矩阵快速幂求斐波那契数列的模板,讲解待更新-- const int N=10; int tmp[N][N]; void multi(int a[][N],int b[] ...

  2. 矩阵快速幂求斐波那契数列(初学整理)

    参考文章: http://blog.csdn.net/u013795055/article/details/38599321 http://blog.csdn.net/g_congratulation ...

  3. 牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)

    链接:https://ac.nowcoder.com/acm/problem/18987 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  4. 矩阵快速幂及斐波那契数列

    1.通用模板:矩阵快速幂 前几天写过一篇矩阵快速幂的一种解法,但是当时只是初学,所以用了当时我更好理解的方法去做.那个解法需要调用两个很相像的函数,而且容易造成紊乱,也不利于矩阵快速幂的推广,所以在观 ...

  5. 2017.3.25 矩阵快速幂 求斐波那契数列第n项

    对于矩阵快速幂只要知道矩阵取模.乘法原理就完全可以手推 口诀:行 列         被计算的行列的交点是结果对应的位置: 剩下的就是推矩阵: 其实根据矩阵的方程意义就很好推了: 码: #includ ...

  6. 利用矩阵快速幂求斐波那契数列

    我们知道如果用记忆化搜索逐项递推可以将复杂度降低到O(n),但是对于更大规模的输入,这个算法效率还是不够高,那么我们考虑更高效的算法: 二阶递推:f(n+2)=(1 1) f(n+1) f(n+1) ...

  7. ZYH的斐波那契数列【线段树动态开点+矩阵快速幂求斐波那契】

    描述 ZYH最近研究数列研究得入迷啦! 现在有一个斐波拉契数列(f[1]=f[2]=1,对于n>2有f[n]=f[n-1]+f[n-2]), 但是斐波拉契数列太简单啦,于是ZYH把它改成了斐波拉 ...

  8. 加强版斐波那契数列(矩阵快速幂)

    关于快速幂的讲解可以参见我的上一篇博客<快速幂> 题目链接:又见斐波那契 题目描述 这是一个加强版的斐波那契数列. 给定递推式 求F(n)的值,由于这个值可能太大,请对10 9+7取模. ...

  9. 使用矩阵的特征值(Eigenvalues)解决斐波那契数列

    一.稳定性和特征向量(Eigenvectors) 我们观察下列 2X2 Matrix A [.8.3.2.7](矩阵A)\left[ \begin{matrix} .8 & .3 \\ .2 ...

最新文章

  1. 2022-2028年中国金属制品行业投资分析及前景预测报告
  2. IPTABLES简单应用说明和Linux下IPTABLES配置详解
  3. 使用requests请求网页时,返回的页面信息有时是乱码,如下代码
  4. Java组合实体模式~
  5. 如何确定VS编译器版本--_MSC_VER || #if _MSC_VER 1000 #pragma once #endif
  6. long mode 分页_在Spring Boot中使用Spring-data-jpa实现分页查询(转)
  7. bzoj 5093 [Lydsy1711月赛]图的价值——第二类斯特林数
  8. android studio 如何导入 RecyclerView
  9. WDS+ADK+MDT部署Windows pxe
  10. 功能强大的NAS云存储
  11. 【数字信号处理】基于DFT的滤波系列4之加窗(含MATLAB代码)
  12. 神经元示踪染料RH 237的功能和研究意义
  13. 【SpringBoot】MultipartResolver文件解析器
  14. cocos creator 背包bag制作
  15. 公众号如何裂变涨粉?
  16. 解决百度网盘下载慢限速问题(2019亲测可用)下载速度不要太爽了
  17. 约当标准型_约当标准形矩阵对应的“基”是什么?
  18. 梦幻西游服务器维护,《梦幻西游》12月1日维护公告
  19. 【历史上的今天】10 月 20 日:微软黑屏事件;Ubuntu Linux 操作系统发布;Apple Pay 正式上线
  20. robocopy 遷移共享文件夾

热门文章

  1. iOS基础(c)—程序结构的分类
  2. Android9(P)添加第三个摄像头预览图片镜像
  3. HUAWEI华为笔记本电脑MateBook 14 2021款i7独显触屏(KLVD-WFE9)原装出厂Windows10系统恢复原厂OEM系统20H2
  4. mysql里字典是什么意思_解析MySQL数据字典中的一些疑问
  5. android 地图红包开发,Android红包精灵开源项目
  6. git没有冲突 但是提示有_git 解决冲突
  7. [转] 用友NC二次开发问题汇总【转】
  8. Git下载安装配置以及连接gitlab
  9. 基于Python的简易宿舍管理系统(课程作业附课程小论文)
  10. Azure云服务基础其二