bz第233题,用一种233333333的做法过掉了(为啥我YY出一个算法来就是全网最慢的啊...)

题意:求sigma{(i^m)*(m^i),1<=i<=n},n<=10^9,m<=200

别人的做法: O(m^2logn),O(m^2),甚至O(m)的神做法

学渣的做法:矩乘+秦九韶算法,O(m^3logn),刚好可以过最弱版本的国王奇遇记的数据

(极限数据单点其实是1.2s+,不想继续卡常了…bzoj卡总时限使人懒惰…如果把矩乘的封装拆掉可能会快点吧,然而人弱懒得拆了...)

首先考虑这么一道题:求sigma{i*(m^i),1<=i<=n},n<=10^9

举一个m=2,n=4的例子:

sigma{i*(m^i),1<=i<=n}   =       1*(2^1)+2*(2^2)+3*(2^3)+4*(2^4)

=       2*(1+2*(2^1)+3*(2^2)+4*(2^3))

=       2*(1+2*(2+3*2+4*2^2))

=       2*(1+2*(2+2*(3+4*2)))

从括号最里面向外计算,那么只需要从0的基础上,依次加4乘2;加3乘2;加2乘2;加1乘2。

这样的运算是很有规律的,我们可以构造一个矩阵用矩阵快速幂来进行计算.

如果是sigma{i*i*(m^i),1<=i<=n}?我们需要在矩阵中保存一个i^2,这时候利用(i-1)^2=i^2-2*i+1,在矩阵中同时保存i和i^2即可

对于国王奇遇记这道题,我们需要从0的基础上,依次加n^m再乘m;加(n-1)^m再乘m,加(n-2)^m再乘m…..

看似矩阵中从n^m到(n-1)^m的转换较难完成

利用二项式定理,在矩阵中存储n^1,n^2,n^3,…n^m,就可以完成转移.

#include<cstdio>
#include<cstring>
//#include<ctime>
#include<algorithm>
using namespace std;
const int mod=,maxn=;
int sz;
struct matrix{
int a[maxn][maxn];
matrix(){
memset(a,,sizeof(a));
}
matrix(int x){
memset(a,,sizeof(a));
for(int i=;i<maxn;++i)a[i][i]=;
}
matrix operator *(const matrix &B)const{
matrix C;
for(int i=;i<=sz;++i){
for(int j=;j<=sz;++j){
if(a[i][j]==)continue;
for(int k=;k<=sz;++k){
if(B.a[j][k]==)continue;
C.a[i][k]=(C.a[i][k]+a[i][j]*1LL*B.a[j][k])%mod;
}
}
}
return C;
}
}A,ANS(),B;
int n,m;
void build_matrix(){
A.a[][]=;
for(int i=;i<sz;++i){
A.a[][i]=;
for(int j=;j<=i;++j){
A.a[j][i]=(A.a[j-][i-]+A.a[j][i-])%mod;
}
}
for(int i=;i<sz;++i){
for(int j=;j<=i;++j){
if((j^i)&)A.a[j][i]=(mod-A.a[j][i])%mod;
}
}
A.a[sz][sz]=m;A.a[sz-][sz]=;
// for(int i=0;i<=sz;++i){
// for(int j=0;j<=sz;++j)printf("%d ",A.a[i][j]);
// printf("\n");
// }
}
void quickpow(int x){
// double t1=clock();
for(;x;x>>=,A=A*A){//printf("!");
if(x&)ANS=ANS*A;
}
// double t2=clock();
}
int pwr[maxn];
int main(){
scanf("%d%d",&n,&m);
pwr[]=;
for(int i=;i<=m;++i){
pwr[i]=pwr[i-]*1LL*n%mod;
}
sz=m+;
build_matrix();
quickpow(n);
int ans=;
for(int i=;i<=m;++i){
ans=(ans+ANS.a[i][sz]*1LL*pwr[i])%mod;
}
printf("%lld\n",ans*1LL*m%mod);
return ;
}

bzoj3157国王奇遇记(秦九韶算法+矩乘)&&bzoj233AC达成的更多相关文章

  1. bzoj3157: 国王奇遇记

    emmm...... 直接看题解好了: BZOJ-3157. 国王奇遇记 – Miskcoo's Space O(m)不懂扔掉 总之,给我们另一个处理复杂求和的方法: 找到函数之间的递推公式! 这里用 ...

  2. BZOJ3157: 国王奇遇记 & 3516: 国王奇遇记加强版

    令\[S_i=\sum_{k=1}^n k^i m^k\]我们有\[\begin{eqnarray*}(m-1)S_i & = & mS_i - S_i \\& = & ...

  3. 扰动法--*BZOJ3157: 国王奇遇记

    求$\sum_{i=1}^ni^mm^i$.$n \leq 1e9,m \leq 200$. 其实我也不知道这东西为啥叫“扰动法”,大概是在黑暗的边缘试探?就是那种,人家再多一点就被您看破了,然后您就 ...

  4. BZOJ3157 国王奇遇记——神奇的推式子

    先膜一发Miskcoo,大佬的博客上多项式相关的非常全 原题戳我 题目大意 求 \[\sum\limits_{i=1}^{n}i^mm^i\] 题解 设一个函数\(f(i)=\sum\limits_{ ...

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

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

  6. 【BZOJ】【3157】&【BZOJ】【3516】国王奇遇记

    数论 题解:http://www.cnblogs.com/zhuohan123/p/3726933.html copy一下推导过程: 令$$S_i=\sum_{k=1}^{n}k^im^k$$ 我们有 ...

  7. BZOJ3157/BZOJ3516 国王奇遇记(矩阵快速幂/数学)

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

  8. 【BZOJ4126】【BZOJ3516】【BZOJ3157】国王奇遇记 线性插值

    题目描述 三倍经验题. 给你\(n,m\),求 \[ \sum_{i=1}^ni^mm^i \] \(n\leq {10}^9,1\leq m\leq 500000\) 题解 当\(m=1\)时\(a ...

  9. bzoj3157 3516 国王奇遇记

    Description Input 共一行包括两个正整数N和M. Output 共一行为所求表达式的值对10^9+7取模的值. 特判m=1 m≠1时: 设S[u]=sigma(i^u*m^i) m*S ...

随机推荐

  1. spring mvc返回json字符串的方式

    spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring- ...

  2. 关于MySql的1146错误修正

    在Mysql数据库中建立连接Mysql后建立了一个数据库名叫Mysql后删除了系统自动建立的数个表,导入.sql文件运行后,想要运行相关的SQL语句却发现一些未知错误为 Table 'mysql.pr ...

  3. JS中的对象

    什么事对象?对象是一个整体,对外提供一些操作.而面向对象,就是使用对象时,只关注对象提供的功能,不关注内部的细节,面向对象是一种通用思想. 面向对象编程的特点: 抽象:抓住核心问题: 封装:不考虑内部 ...

  4. 用 Excel 测试“绘制两点间连线”的算法

    最近在研究和制作数字示波器,其中涉及一个小算法:需要将 ADC 采样的数值在 TFT LCD 屏幕上面显示并且用“线”连接起来. ADC 按照时序对输入电压采样后,记录的是一个个的数值,如果显示的时候 ...

  5. Atitit mac os 版本 新特性 attilax大总结

    Atitit mac os 版本 新特性 attilax大总结 1. Macos概述1 2. 早期2 2.1. Macintosh OS (系统 1.0)  1984年2 2.2. Mac OS 7. ...

  6. xml文件解析(解析以后在RootTableViewController输出)

    这是从美团弄得xml文件,地区和经纬度. 你点了地区以后 ,  就可以查看经纬度 ,因为笔者懒, 有现成的文本框 , 所有偷懒了. 下面是一些枯燥的代码了 . #import <UIKit/UI ...

  7. DXGI 1.4的新特性

    其实到写这篇文章的时候,DXGI已经出1.5版了,但很多朋友实际上还在用1.2甚至1.1,所以现在谈1.4一点也不过时,而且1.4又是一次非常重大的更新,很值得仔细谈谈. 为了支持Direct3D 1 ...

  8. 4、项目的培训 - PMO项目管理办公室

    培训是一个重要的内容,在公司内部就有相关的培训.对于PMO项目管理办公室来说,就是相关的项目的技术和业务的培训,以期让项目组人员能够快速的学习好项目业务内容和所需要使用到的技术内容,然后尽快的进入项目 ...

  9. although 和 although 的区别

    作为连词的时候,although 和 though 是可以互换的.Although 一般被认为更加正式一些.比如,以下的这些句子: Growth in Europe is maintaining mo ...

  10. 【推荐】CentOS安装PHP-5.6.4+扩展安装+安全配置+性能配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 前段时间PHP官方发布了一个重要的安全升级公告,修复了两个unserialize函数的严重漏洞,目前受影响的版本有: ...