来自FallDream的博客,未经允许,请勿转载,谢谢。


热情好客的请森林中的朋友们吃饭,他的朋友被编号为 1~N,每个到来的朋友都会带给他一些礼物:。其中,第一个朋友会带给他 1 个,之后,每一个朋友到来以后,都会带给他之前所有人带来的礼物个数再加他的编号的 K 次方那么多个。所以,假设 K=2,前几位朋友带来的礼物个数分别是:1,5,15,37,83假设 K=3,前几位朋友带来的礼物个数分别是:1,9,37,111现在,好奇自己到底能收到第 N 个朋友多少礼物,因此拜托于你了。已知 N,K请输出第 N 个朋友送的礼物个数 mod1000000007
N≤10^18,K≤10
 
首先把它给你的数字前缀和一下 得到递推式f[i]=2*f[i-1]+i^k
构造一个k+2维的矩阵,一维维护答案,另外分别维护i的0到k次方数字。
转移矩阵的话,n^k -> (n+1)^k ,把后面的用组合数拆开就行了。
复杂度k^3logn
#include<iostream>
#include<cstring>
#include<cstdio>
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int k,C[][];long long n;
struct Matrix
{
int s[][];
Matrix(){memset(s,,sizeof(s));}
Matrix operator * (const Matrix&b)
{
Matrix c;
for(int i=;i<=k+;++i)
for(int j=;j<=k+;++j)
for(int K=;K<=k+;++K)
c.s[i][j]=(c.s[i][j]+1LL*s[i][K]*b.s[K][j])%mod;
return c;
}
void print()
{
for(int i=;i<=k+;++i,puts(""))
for(int j=;j<=k+;++j)
printf("%d ",s[i][j]);
}
}A,B,c,d; int Solve(long long N)
{
A=c;B=d;
for(;N;N>>=,A=A*A) if(N&) B=A*B;
return B.s[k+][];
} int main()
{
for(int i=;i<=;++i) C[i][]=;
for(int i=;i<=;++i)for(int j=;j<=i;++j) C[i][j]=(C[i-][j-]+C[i-][j])%mod;
cin>>n>>k;
A.s[k+][k+]=;A.s[k+][k]=;A.s[][]=;
for(int i=;i<=k;++i)
{
B.s[i][]=;
for(int j=;j<=i;++j)
A.s[i][j]=C[i][i-j];
}
c=A;d=B;
printf("%d\n",(Solve(n)-Solve(n-)+mod)%mod);
return ;
}

最新文章

  1. zTree和SweetAlert插件初探
  2. 设计模式(四)抽象工厂模式(Abstract Factory Pattern)
  3. 进阶系列一【绝对干货】---SQL语句执行效率优化
  4. Linux 编译 websocket++
  5. SQL Server数据库(SQL Sever语言 函数以及SQL编程)
  6. 网易面试题:和为n连续正数序列
  7. Python基础教程之List对象 转
  8. psp系统需求分析
  9. CSS 创建
  10. wpf全局异常
  11. hello world2
  12. 不停止MySQL服务增加从库的两种方式【转载】
  13. 用JQuery写的滚动条,可以改变样式哦!
  14. 10、ABPZero系列教程之拼多多卖家工具 拼团提醒逻辑功能实现
  15. SpringMVC框架学习笔记(4)——结果跳转方式
  16. 粗浅看Struts2和Hibernate框架
  17. Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures
  18. 如何连接LINUX服务器
  19. vue 之 Virtual Dom
  20. Flume+HBase+Kafka集成与开发

热门文章

  1. 2018C程序设计—第0次作业
  2. JAVA_SE基础——24.面向对象的内存分析
  3. Python 黑客相关电子资源和书籍推荐
  4. SpringBoot单元测试中的事务和Session
  5. SpringBoot应用的属性管理
  6. docker实践3
  7. Linux上 ps 命令的用法
  8. java中的引用类型的对象存放在哪里
  9. angular-单页面应用程序
  10. Java-NIO(三):直接缓冲区与非直接缓冲区