对于一个在位置 \(i\) 的数,他等于 \(i^k+sum_{1,k-1}\)。

二项式定理推 \(i^k\),矩阵快速幂即可。

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
int k, c[15][15];
ll n;
const int mod=1e9+7;
struct Matrix{
int num[15][15];
Matrix operator*(const Matrix &x)const{
Matrix re;
for(int i=0; i<=k+1; i++)
for(int j=0; j<=k+1; j++){
re.num[i][j] = 0;
for(int l=0; l<=k+1; l++)
re.num[i][j] = (re.num[i][j] + (ll)num[i][l]*x.num[l][j]) % mod;
}
return re;
}
}yua, zhu, dan;
Matrix ksm(ll b){
while(b){
if(b&1) dan = dan * zhu;
zhu = zhu * zhu;
b >>= 1;
}
return dan;
}
int main(){
cin>>n>>k;
for(int i=0; i<=k; i++)
yua.num[0][i] = dan.num[i][i] = 1;
c[0][0] = zhu.num[k][k+1] = dan.num[k+1][k+1] = 1;
for(int i=1; i<=k; i++){
c[i][0] = 1;
for(int j=1; j<=i; j++)
c[i][j] = (c[i-1][j] + c[i-1][j-1]) % mod;
}
for(int i=0; i<=k; i++)
for(int j=i; j<=k; j++)
zhu.num[i][j] = c[j][i];
zhu.num[k+1][k+1] = 2;
Matrix ans=yua*ksm(n-1);
cout<<(ans.num[0][k+1]+ans.num[0][k])%mod<<endl;
return 0;
}

最新文章

  1. 浅谈Collection集合
  2. VS SuppressMessage忽略特定方法的警告信息
  3. Webbench网站压力测试
  4. bzoj1019 [SHOI2008]汉诺塔
  5. 山东理工大学第七届ACM校赛-LCM的个数 分类: 比赛 2015-06-26 10:37 18人阅读 评论(0) 收藏
  6. 【SQL查询日志】查看数据库历史查询记录
  7. DllImport 相关错误
  8. Eclipse 常用快捷键 (动画讲解)(转载)
  9. mysql ifnull if
  10. Dotliquid使用Json模板变量
  11. SOFA 源码分析 — 连接管理器
  12. css 优化
  13. nginx常用服务配置
  14. 【转】【fiddler】抓取https数据失败,全部显示“Tunnel to......443”
  15. [内核驱动] DOS路径转化为NT路径
  16. Codeforces Round #519 by Botan Investments F. Make It One
  17. ERP条码解决方案,金蝶盘点机条码解决方案,应用PDA的信息化管理能给我们的生产管理带来怎么样的变化的探讨
  18. poj 1144 Network 无向图求割点
  19. 深入了解Looper、Handler、Message之间关系
  20. .net core API 使用swagger

热门文章

  1. 一个页面有相同ID元素的情况分析
  2. php出现Warning: file_put_contents,failed to open stream
  3. [转]NopCommerce之视图设计
  4. Java语言中自动生成随机数
  5. 快速搭建一个Fabric 1.0的环境(转)
  6. centos 7下Hadoop 2.7.2 伪分布式安装
  7. Android 如何通过Retrofit提交Json格式数据
  8. VS远程调试虚拟机中的程序
  9. ubuntu 14.04 配置java 1.8环境变量
  10. iOS图片目录批量复制到android图片目录