loj2253 「SNOI2017」礼物
2024-08-23 03:30:18
对于一个在位置 \(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;
}
最新文章
- 浅谈Collection集合
- VS SuppressMessage忽略特定方法的警告信息
- Webbench网站压力测试
- bzoj1019 [SHOI2008]汉诺塔
- 山东理工大学第七届ACM校赛-LCM的个数 分类: 比赛 2015-06-26 10:37 18人阅读 评论(0) 收藏
- 【SQL查询日志】查看数据库历史查询记录
- DllImport 相关错误
- Eclipse 常用快捷键 (动画讲解)(转载)
- mysql ifnull if
- Dotliquid使用Json模板变量
- SOFA 源码分析 — 连接管理器
- css 优化
- nginx常用服务配置
- 【转】【fiddler】抓取https数据失败,全部显示“Tunnel to......443”
- [内核驱动] DOS路径转化为NT路径
- Codeforces Round #519 by Botan Investments F. Make It One
- ERP条码解决方案,金蝶盘点机条码解决方案,应用PDA的信息化管理能给我们的生产管理带来怎么样的变化的探讨
- poj 1144 Network 无向图求割点
- 深入了解Looper、Handler、Message之间关系
- .net core API 使用swagger
热门文章
- 一个页面有相同ID元素的情况分析
- php出现Warning: file_put_contents,failed to open stream
- [转]NopCommerce之视图设计
- Java语言中自动生成随机数
- 快速搭建一个Fabric 1.0的环境(转)
- centos 7下Hadoop 2.7.2 伪分布式安装
- Android 如何通过Retrofit提交Json格式数据
- VS远程调试虚拟机中的程序
- ubuntu 14.04 配置java 1.8环境变量
- iOS图片目录批量复制到android图片目录