BZOJ3157/BZOJ3516 国王奇遇记(矩阵快速幂/数学)
由二项式定理,(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 国王奇遇记(矩阵快速幂/数学)相关推荐
- 【BZOJ3157/3516】国王奇遇记(数论)
[BZOJ3157/3516]国王奇遇记(数论) 题面 BZOJ3157 BZOJ3516 题解 先考虑怎么做\(m\le 100\)的情况. 令\(f(n,k)=\displaystyle \sum ...
- 快速幂 + 矩阵快速幂
快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...
- POJ - 2778 DNA Sequence(AC自动机+矩阵快速幂)
题目链接:点击查看 题目大意:给出 n 个长度不大于 10 的字符串表示病毒串,再给出一个长度 len ,问长度为 len 的字符串中,有多少个字符串不含有病毒串作为子串 题目分析:因为病毒串的长度和 ...
- 快速幂,矩阵乘法,矩阵快速幂
快速幂利用二进制 复杂度 log级 #include <cstdio> #include <iostream> #include <string> #include ...
- [选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)
多年不考试,一夜回到解放前 T1:花园 title solution code T2:月亮神树 title solution code T3:保护出题人 title solution code T1: ...
- c语言求佩尔方程的解设计思路,c语言版 佩尔方程求最小正整数解及第k解(矩阵快速幂)...
佩尔方程讲解连接: 若一个丢番图方程具有以下的形式: 且 为正整数,则称此方程为佩尔方程(英文:Pell's equation 德文:Pellsche Gleichung) 若 是完全平方数,则这个方 ...
- CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)
CF传送门 洛谷传送门 [题目分析] 在zxy大佬的讲解下终于懂了这道题的做法了qwq... 首先根据题意,出发点不一定在特殊点上,但第一次操作后,之后所有的操作都是在特殊点上,所以先考虑从线上出发的 ...
- 矩阵快速幂求斐波那契数列(初学整理)
参考文章: http://blog.csdn.net/u013795055/article/details/38599321 http://blog.csdn.net/g_congratulation ...
- 浅谈矩阵 矩阵快速幂 动态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 ...
- Fzu 2198 快来快来数一数【矩阵快速幂】
Problem 2198 快来快来数一数 Accept: 218 Submit: 704 Time Limit: 1000 mSec Memory Limit : 65536 KB P ...
最新文章
- cmw500综合测试仪使用_大屏幕真彩色互感器综合特性测试仪功能特点
- 【Party】现在只是一张普通的照片,以后可能就是历史。
- Android 自定义view的知识梳理。
- vuex Payload 荷载
- 西瓜书《机器学习》线性模型 一元线性回归公式推导
- 三角函数与反三角函数图像
- 计算机excel试题各科学员,计算机Excel练习题一及答案.doc
- php调用itunes,使用cURL和PHP检索iTunes App Store XML
- 经典语录(个人喜欢)
- php 条形码在线怎么生成,php实现在线生成条形码示例分享(条形码生成器)
- 浏览器在百度O2O战略中的位置
- OpenCVSharp 相机棋盘格校正
- opengl处理图片翻转
- matlab中ode45是什么意思,matlab中的ode45
- 工业相机及镜头的选型
- 复旦Moss团队:Moss参数规模约是ChatGPT的1/10;贾跃亭再获FF执行官身份;PowerToys新版发布|极客头条
- python的pyaudio教程入门_[宜配屋]听图阁
- 央视《家有妙招》整理版,共125招,值得永远收藏
- 2021最新 阿里云服务器免费SSL证书配置方法(图文教程)
- 新kali版本,root默认密码
热门文章
- 5. 吴恩达机器学习课程-作业5-偏差和方差
- python编程新手常犯的错误_初学者开发人员都会犯的7个Python错误
- “21天好习惯“第一期-1
- Python 字典实现原理
- yarn开启Label Scheduler
- idea查找类 方法在哪里被使用
- rm: cannot remove ‘malloc.pro/.user.ini‘: Operation not permitted
- 【转】契约测试的必要性
- HBase实战 | 从MySQL到HBase:数据存储方案转型的演进
- Oracle的数据并发与一致性详解(下)