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

题面

BZOJ3157
BZOJ3516

题解

先考虑怎么做\(m\le 100\)的情况、
令\(f(n,k)=\displaystyle \sum_{i=1}^n i^k m^i\),然后推式子:
\[\begin{aligned} f(n+1,k)&=\sum_{i=1}^{n+1} i^km^i=m+\sum_{i=2}^{n+1}i^km^i\\ &=m+\sum_{i=1}^n (i+1)^km^{i+1}\\ &=m+m\sum_{i=1}^n m^i\sum_{j=0}^k{k\choose j}i^j\\ &=m+m\sum_{j=0}^{k}{k\choose j}\sum_{i=1}^n i^jm^i\\ &=m+m\sum_{j=0}^k {k\choose j}f(n,j) \end{aligned}\]
这样子可以做到\(O(nm)\)。
考虑继续处理这个式子:
\[\begin{aligned} f(2n,k)&=\sum_{i=1}^{2n}i^km^i=f(n,k)+m^n\sum_{i=1}^n (i+n)^km^i\\ &=f(n,k)+m^n\sum_{i=1}^n m^i\sum_{j=0}^k {k\choose j}i^jn^{k-j}\\ &=f(n,k)+m^n\sum_{j=0}^k{k\choose j}n^{k-j}\sum_{i=1}^ni^j m^i\\ &=f(n,k)+m^n\sum_{j=0}^k{k\choose j}n^{k-j}f(n,j) \end{aligned}\]
既然这样子就可以愉快的倍增了。
时间复杂度\(O(m^2\log n)\)

#include<iostream>
using namespace std;
#define MOD 1000000007
int n,m,f[222],C[222][222],pw[222],tmp[222];
int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
void Solve(int n)
{if(n==1){for(int i=0;i<=m;++i)f[i]=m;return;}Solve(n>>1);int pwm=fpow(m,n>>1);pw[0]=1;for(int i=1;i<=m;++i)pw[i]=1ll*pw[i-1]*(n>>1)%MOD;for(int i=0;i<=m;++i)tmp[i]=f[i];for(int k=0;k<=m;++k)for(int j=0;j<=k;++j)tmp[k]=(tmp[k]+1ll*pwm*C[k][j]%MOD*pw[k-j]%MOD*f[j])%MOD;for(int i=0;i<=m;++i)f[i]=tmp[i];if(n&1){for(int i=0;i<=m;++i)tmp[i]=m;for(int k=0;k<=m;++k)for(int j=0;j<=k;++j)tmp[k]=(tmp[k]+1ll*m*C[k][j]%MOD*f[j])%MOD;for(int i=0;i<=m;++i)f[i]=tmp[i];}
}
int main()
{cin>>n>>m;for(int i=0;i<=m;++i)C[i][0]=1;for(int i=1;i<=m;++i)for(int j=1;j<=i;++j)C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;Solve(n);cout<<f[m]<<endl;return 0;
}

然而如果你直接把上面的代码去交加强版就会\(T\)飞(时限\(1s\))
考虑更加优秀的方法。
直接令\(f(k)=\sum_{i=1}^n i^k m^i\)。
然后拿出来强行做个差:
\[\begin{aligned} mf(k)-f(k)&=\sum_{i=1}^n i^k m^{i+1}-\sum_{i=1}^n i^km^i\\ &=n^km^{n+1}+\sum_{i=1}^{n} (i-1)^km^i-\sum_{i=1}^n i^k m^i\\ &=n^km^{n+1}+\sum_{i=1}^{n}m^i((i-1)^k-i^k)\\ &=n^km^{n+1}+\sum_{i=1}^n m^i \sum_{j=0}^{k-1}{k\choose j}(-1)^{k-j}i^j\\ &=n^km^{n+1}+\sum_{j=0}^{k-1}{k\choose j}(-1)^{k-j}\sum_{i=1}^n i^jm^i\\ &=n^km^{n+1}+\sum_{j=0}^{k-1}{k\choose j}(-1)^{k-j}f(j)\\ \end{aligned}\]
于是就可以做到\(O(m^2)\)了。
注意\(m=1\)的时候需要特判。

#include<iostream>
using namespace std;
#define MOD 1000000007
int n,m,f[1010],C[1010][1010],pw[1010],tmp[1010];
int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
int main()
{cin>>n>>m;if(m==1){cout<<1ll*n*(n+1)/2%MOD<<endl;return 0;}int inv=fpow(m-1,MOD-2);for(int i=0;i<=m;++i)C[i][0]=1;for(int i=1;i<=m;++i)for(int j=1;j<=i;++j)C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;f[0]=1ll*(fpow(m,n)+MOD-1)*inv%MOD*m%MOD;for(int k=1,pwm=fpow(m,n+1),pw=n;k<=m;++k,pw=1ll*pw*n%MOD){f[k]=1ll*pw*pwm%MOD;for(int j=0,d=((k&1)?(MOD-1):1);j<k;++j,d=MOD-d)f[k]=(f[k]+1ll*C[k][j]*d%MOD*f[j])%MOD;f[k]=1ll*f[k]*inv%MOD;}cout<<f[m]<<endl;return 0;
}

似乎还要一个更强的版本,然而我不会做QwQ。

转载于:https://www.cnblogs.com/cjyyb/p/10579084.html

【BZOJ3157/3516】国王奇遇记(数论)相关推荐

  1. bzoj 3157 bzoj 3516 国王奇遇记 —— 推式子

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...

  2. 3157: 国王奇遇记 3516: 国王奇遇记加强版 - BZOJ

    果然我数学不行啊,题解君: http://www.cnblogs.com/zhuohan123/p/3726933.html 1 const 2 h=1000000007; 3 var 4 fac,f ...

  3. bzoj 3157: 国王奇遇记3516: 国王奇遇记加强版

    题意 给定 n , m n,m n,m 计算 ∑ i = 1 n i m ∗ m i \sum_{i=1}^ni^m*m^i ∑i=1n​im∗mi n ≤ 1 0 9 , m ≤ 5000 n\le ...

  4. 【BZOJ 35164126】国王奇遇记

    problem 给定 n , m n,m n,m,求: ∑ i = 1 n i m m i \sum_{i=1}^ni^mm^i i=1∑n​immi BZOJ 3516: 1 ≤ n ≤ 1 0 9 ...

  5. 无名数学题1(国王奇遇记减弱版)

    给出n,k,求出1^k+2^k+3^k+......n^k ,结果Mod 1234567891输出 (n<=10^9,k<=100) 真的是难啊...... 证明如下: 然后k^2递推就可 ...

  6. Java练习 SDUT-2737_小鑫の日常系列故事(六)——奇遇记

    小鑫の日常系列故事(六)--奇遇记 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 今天,小鑫在山上玩的时候,意外被推下 ...

  7. C语言scanf函数奇遇记

    C语言scanf函数奇遇记 作者:ocean    撰写日期:2011-11-20 博客链接:http://oceanspace.tk 看<The C Programming Language& ...

  8. exception e 是泛类吗_Spring异步编程 | 你的@Async就真的异步吗?异步历险奇遇记

    引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们biaji一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: 注 ...

  9. springboot异步和切面_Spring异步编程 你的@Async就真的异步吗?异步历险奇遇记

    引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们biaji一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: 注 ...

最新文章

  1. python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析
  2. win10 mysql5.5无响应_Win10安装mysql5.5安装最后一步停住卡死未响应的解决方法
  3. python常用指令速查
  4. Asp.Net_文件操作基类
  5. 如何更优雅的写出你的SQL语句
  6. Python bytearray/bytes/string区别
  7. C# 4.0 实现 Method Missing
  8. 网络监控工具--ntop
  9. Java电话号码滚动抽奖_js手机号码批量滚动抽奖代码实现
  10. 散粉在哪个步骤用_平时用的散粉除了所谓的定妆,还有这么多好处啊?
  11. 教程入门:建立一个完全自动化的交易系统
  12. 单片机c语言编程300例,51单片机C语言实例(350例)Proteus仿真和代码
  13. ImageView和ImageButton的区别
  14. Mac字体安装的方法?Mac怎么安装新字体?Mac字体安装教程
  15. VP9编码(4)-- 约定
  16. 心上莲花:佛教简介(上)
  17. 军犬舆情每日热点:台湾海峡发生6.2级地震;泉州通报碳九泄漏事件处理结果
  18. Google谷歌打不开2014最新解决方法
  19. 解决SharedPerferences初始化报NullPoint空指针的异常
  20. 10g gtx 光纤通信测试_S03-CH05_UDP 万兆光通信

热门文章

  1. 【面试】网易游戏面试题目整理及答案(5)
  2. 2013年考研英语二真题
  3. 运营小白如何选择靠谱的运营工作
  4. iOS线上APP崩溃(Crash)分析
  5. CREATE ROUTINE
  6. 【问】数据库服务无法启动
  7. 周鸿祎调侃罗永浩:段子手的阵亡对我打击很大
  8. 如此雾霾,何不SOHO
  9. 数字图像与机器视觉基础补充(1)——区分位图和图像处理
  10. 【高级UI】【009】贝塞尔曲线图形原理和公式推导