BZOJ3157 国王奇遇记——神奇的推式子
先膜一发Miskcoo,大佬的博客上多项式相关的非常全
原题戳我
题目大意
求
\]
题解
设一个函数\(f(i)=\sum\limits_{j=1}^{n}j^im^j\)
然后貌似用一个叫扰动法(感觉就是错位相消法)的东西,算一下
\]
其中,\((j-1)^i-j^i\)可以用一波二项式展开化为\(\sum\limits_{k=0}^{i-1}\binom{i}{k}(-1)^{i-k}j^k\),回带可得
\]
然后就有了一个\(O(m^2)\)的递推做法,还有一个\(O(m)\)的,但看起来挺麻烦的,咕了
以下是代码,注意初值\(f(0)\)的设置还有\(m=1\)时的特判
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define ull unsigned long long
#define pii pair<int, int>
#define uint unsigned int
#define mii map<int, int>
#define lbd lower_bound
#define ubd upper_bound
#define INF 0x3f3f3f3f
#define IINF 0x3f3f3f3f3f3f3f3fLL
#define vi vector<int>
#define ll long long
#define mp make_pair
#define pb push_back
#define re register
#define il inline
#define MOD 1000000007
#define M 1000
int n, m;
int C[M+5][M+5];
int f[M+5];
int fpow(int x, int p) {
int ret = 1;
while(p) {
if(p&1) ret = 1LL*ret*x%MOD;
x = 1LL*x*x%MOD;
p >>= 1;
}
return ret;
}
void init() {
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-1]+C[i-1][j])%MOD;
f[0] = (1LL*(fpow(m, n+1)-1)*fpow(m-1, MOD-2)%MOD-1+MOD)%MOD;
}
int main() {
scanf("%d%d", &n, &m);
if(m == 1) {
printf("%lld\n", 1LL*n*(n+1)%MOD*fpow(2, MOD-2)%MOD);
return 0;
}
init();
for(int i = 1; i <= m; ++i) { // 递推
f[i] = 1LL*fpow(n, i)*fpow(m, n+1)%MOD;
for(int j = 0; j <= i-1; ++j) {
if((i-j)&1) f[i] = (f[i]-1LL*C[i][j]*f[j]%MOD)%MOD;
else f[i] = (f[i]+1LL*C[i][j]*f[j]%MOD)%MOD;
}
f[i] = (1LL*f[i]*fpow(m-1, MOD-2)%MOD+MOD)%MOD;
}
printf("%d\n", f[m]);
return 0;
}
BZOJ3157 国王奇遇记——神奇的推式子的更多相关文章
- bzoj3157: 国王奇遇记
emmm...... 直接看题解好了: BZOJ-3157. 国王奇遇记 – Miskcoo's Space O(m)不懂扔掉 总之,给我们另一个处理复杂求和的方法: 找到函数之间的递推公式! 这里用 ...
- bzoj3157国王奇遇记(秦九韶算法+矩乘)&&bzoj233AC达成
bz第233题,用一种233333333的做法过掉了(为啥我YY出一个算法来就是全网最慢的啊...) 题意:求sigma{(i^m)*(m^i),1<=i<=n},n<=10^9,m ...
- BZOJ 3516 国王奇遇记加强版(乱推)
题意 求\(\sum_{k=1}^{n}k^mm^k (n\leq1e9,m\leq1e3)\) 思路 在<>中有一个方法用来求和,称为摄动法. 我们考虑用摄动法来求这个和式,看能不能得到 ...
- BZOJ3157: 国王奇遇记 & 3516: 国王奇遇记加强版
令\[S_i=\sum_{k=1}^n k^i m^k\]我们有\[\begin{eqnarray*}(m-1)S_i & = & mS_i - S_i \\& = & ...
- 扰动法--*BZOJ3157: 国王奇遇记
求$\sum_{i=1}^ni^mm^i$.$n \leq 1e9,m \leq 200$. 其实我也不知道这东西为啥叫“扰动法”,大概是在黑暗的边缘试探?就是那种,人家再多一点就被您看破了,然后您就 ...
- 【BZOJ3157/3516】国王奇遇记(数论)
[BZOJ3157/3516]国王奇遇记(数论) 题面 BZOJ3157 BZOJ3516 题解 先考虑怎么做\(m\le 100\)的情况. 令\(f(n,k)=\displaystyle \sum ...
- 【BZOJ】【3157】&【BZOJ】【3516】国王奇遇记
数论 题解:http://www.cnblogs.com/zhuohan123/p/3726933.html copy一下推导过程: 令$$S_i=\sum_{k=1}^{n}k^im^k$$ 我们有 ...
- bzoj 3157 && bzoj 3516 国王奇遇记——推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...
- bzoj 3157 & bzoj 3516 国王奇遇记 —— 推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...
随机推荐
- editor does not cantain a main type——解决
editor does not cantain a main type 这个错误就是包名与路径不对
- Vue代码分割懒加载的实现方法
什么是懒加载 懒加载也叫延迟加载,即在需要的时候进行加载,随用随载. 为什么需要懒加载 在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多 ...
- oracle父子级查询数据树结构
select t.*, level , sys_connect_by_path (t .id, '-->') as tree from isc_res_res_r t connect by pr ...
- Java web server 基本实现原理
public class WebServer { //服务端Socket只要一个,所以定义成static, 同一时间只能一个线程访问(主线程) private static ServerSocket ...
- 如何判断你的windows系统是32位还是64位?
[学习笔记] 如 何判断你的windows系统是32位还是64位? java -version时,如果没有64就是32位的.eclipse.ini中如果没有64,就是32位的.但是我们的ini文件里面 ...
- C++多线程基础学习笔记(十)
一.Windows临界区的基本用法 CRITICAL_SECTION my_winsc; //定义一个Windows的临界区,相当于一个mutex变量 InitializeC ...
- 从入门到自闭之Python解释器安装
Python解释器的安装 1 下载 下载地址:https://www.python.org 选择windows平台的链接进行下载 https://www.python.org/downloads/ ...
- Java 同一个类的不同实例对象竟然可以相互访问各自的private成员
如题,在看String源码的某个函数时,发现了这个操作是被允许的,而且可以直接改变private字段(不是final按理是可以改变),这与之前的理解有点相背. 接下来试图整理下Google来的结论: ...
- java Lesson08总结
package com.xt.java.FirstExciple.oop; public class NokiaPhone { //成员变量 String name="np001" ...
- NVIDIA双显卡
NVIDIA双显卡 第一步:代码:sudo update-pciids #更新显卡信息非常重要,否则可能识别出错lspci -v | grep -i vga #察看显卡 我的显卡信息如下:代码:00: ...