由二项式定理,(m+1)k=ΣC(k,i)*mi。由此可以构造矩阵转移,将mi*ik全部塞进去即可,系数即为组合数*m。复杂度O(m3logn),因为大常数喜闻乐见的T掉了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
#define N 202
#define P 1000000007
int n,m,C[N][N];
struct matrix
{int n,a[N][N];matrix operator *(const matrix&b) const{matrix c;c.n=n;memset(c.a,0,sizeof(c.a));for (register int i=0;i<n;i++)for (register int j=0;j<N;j++)for (register int k=0;k<N;k++)c.a[i][j]=(c.a[i][j]+1ll*a[i][k]*b.a[k][j]%P)%P;return c;}
}f,a;
int main()
{
#ifndef ONLINE_JUDGEfreopen("bzoj3157.in","r",stdin);freopen("bzoj3157.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifn=read()+1,m=read();C[0][0]=1;for (int i=1;i<=m;i++){C[i][0]=C[i][i]=1;for (int j=1;j<i;j++)C[i][j]=(C[i-1][j-1]+C[i-1][j])%P;}a.n=m+2;for (int i=0;i<=m;i++)for (int j=0;j<=i;j++)a.a[j][i]=1ll*m*C[i][j]%P;a.a[m][m+1]=a.a[m+1][m+1]=1;f.n=1;f.a[0][0]=1;for (;n;n>>=1,a=a*a) if (n&1) f=f*a;cout<<f.a[0][m+1];return 0;
}

View Code

  考虑更神的完全想不到的推导:(直接搬了)

  

  就可以做到O(m2)了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
#define N 2010
#define P 1000000007
int n,m,C[N][N],f[N];
int ksm(int a,int k)
{if (k==0) return 1;int tmp=ksm(a,k>>1);if (k&1) return 1ll*tmp*tmp%P*a%P;else return 1ll*tmp*tmp%P;
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("bzoj3157.in","r",stdin);freopen("bzoj3157.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifn=read(),m=read();C[0][0]=1;for (int i=1;i<=m;i++){C[i][0]=C[i][i]=1;for (int j=1;j<i;j++)C[i][j]=(C[i-1][j-1]+C[i-1][j])%P;}if (m==1) {cout<<(1ll*n*(n+1)>>1)%P;return 0;}f[0]=1ll*m*(ksm(m,n)-1)%P*ksm(m-1,P-2)%P;for (int i=1;i<=m;i++){f[i]=1ll*ksm(n,i)*ksm(m,n+1)%P;for (int j=0;j<i;j++)if (i-j&1) f[i]=(f[i]-1ll*C[i][j]*f[j]%P+P)%P;else f[i]=(f[i]+1ll*C[i][j]*f[j]%P)%P;f[i]=1ll*f[i]*ksm(m-1,P-2)%P;}cout<<f[m];return 0;
}

  甚至可以做到O(m)。不觉得能看懂了。

转载于:https://www.cnblogs.com/Gloid/p/9668438.html

BZOJ3157/BZOJ3516 国王奇遇记(矩阵快速幂/数学)相关推荐

  1. 【BZOJ3157/3516】国王奇遇记(数论)

    [BZOJ3157/3516]国王奇遇记(数论) 题面 BZOJ3157 BZOJ3516 题解 先考虑怎么做\(m\le 100\)的情况. 令\(f(n,k)=\displaystyle \sum ...

  2. 快速幂 + 矩阵快速幂

    快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...

  3. POJ - 2778 DNA Sequence(AC自动机+矩阵快速幂)

    题目链接:点击查看 题目大意:给出 n 个长度不大于 10 的字符串表示病毒串,再给出一个长度 len ,问长度为 len 的字符串中,有多少个字符串不含有病毒串作为子串 题目分析:因为病毒串的长度和 ...

  4. 快速幂,矩阵乘法,矩阵快速幂

    快速幂利用二进制 复杂度 log级 #include <cstdio> #include <iostream> #include <string> #include ...

  5. [选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)

    多年不考试,一夜回到解放前 T1:花园 title solution code T2:月亮神树 title solution code T3:保护出题人 title solution code T1: ...

  6. c语言求佩尔方程的解设计思路,c语言版 佩尔方程求最小正整数解及第k解(矩阵快速幂)...

    佩尔方程讲解连接: 若一个丢番图方程具有以下的形式: 且 为正整数,则称此方程为佩尔方程(英文:Pell's equation 德文:Pellsche Gleichung) 若 是完全平方数,则这个方 ...

  7. CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)

    CF传送门 洛谷传送门 [题目分析] 在zxy大佬的讲解下终于懂了这道题的做法了qwq... 首先根据题意,出发点不一定在特殊点上,但第一次操作后,之后所有的操作都是在特殊点上,所以先考虑从线上出发的 ...

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

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

  9. 浅谈矩阵 矩阵快速幂 动态dp 矩阵求逆

    文章目录 1 矩阵 1.1 矩阵乘法 1.2 单位矩阵 1.3 矩阵乘法的结合律 1.4 矩阵快速幂 1.5 矩阵快速幂的应用 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 ...

  10. Fzu 2198 快来快来数一数【矩阵快速幂】

     Problem 2198 快来快来数一数 Accept: 218    Submit: 704 Time Limit: 1000 mSec    Memory Limit : 65536 KB  P ...

最新文章

  1. cmw500综合测试仪使用_大屏幕真彩色互感器综合特性测试仪功能特点
  2. 【Party】现在只是一张普通的照片,以后可能就是历史。
  3. Android 自定义view的知识梳理。
  4. vuex Payload 荷载
  5. 西瓜书《机器学习》线性模型 一元线性回归公式推导
  6. 三角函数与反三角函数图像
  7. 计算机excel试题各科学员,计算机Excel练习题一及答案.doc
  8. php调用itunes,使用cURL和PHP检索iTunes App Store XML
  9. 经典语录(个人喜欢)
  10. php 条形码在线怎么生成,php实现在线生成条形码示例分享(条形码生成器)
  11. 浏览器在百度O2O战略中的位置
  12. OpenCVSharp 相机棋盘格校正
  13. opengl处理图片翻转
  14. matlab中ode45是什么意思,matlab中的ode45
  15. 工业相机及镜头的选型
  16. 复旦Moss团队:Moss参数规模约是ChatGPT的1/10;贾跃亭再获FF执行官身份;PowerToys新版发布|极客头条
  17. python的pyaudio教程入门_[宜配屋]听图阁
  18. 央视《家有妙招》整理版,共125招,值得永远收藏
  19. 2021最新 阿里云服务器免费SSL证书配置方法(图文教程)
  20. 新kali版本,root默认密码

热门文章

  1. 5. 吴恩达机器学习课程-作业5-偏差和方差
  2. python编程新手常犯的错误_初学者开发人员都会犯的7个Python错误
  3. “21天好习惯“第一期-1
  4. Python 字典实现原理
  5. yarn开启Label Scheduler
  6. idea查找类 方法在哪里被使用
  7. rm: cannot remove ‘malloc.pro/.user.ini‘: Operation not permitted
  8. 【转】契约测试的必要性
  9. HBase实战 | 从MySQL到HBase:数据存储方案转型的演进
  10. Oracle的数据并发与一致性详解(下)