【BZOJ4126】【BZOJ3516】【BZOJ3157】国王奇遇记 线性插值
题目描述
三倍经验题。
给你\(n,m\),求
\]
\(n\leq {10}^9,1\leq m\leq 500000\)
题解
当\(m=1\)时\(ans=\frac{n(n+1)}{2}\)
剩下的部分这篇博客有讲YWW's Blog
时间复杂度:\(O(m+\log n)\)
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll p=1000000007;
ll fp(ll a,ll b)
{
ll s=1;
for(;b;b>>=1,a=a*a%p)
if(b&1)
s=s*a%p;
return s;
}
int pri[100010];
int b[1000010];
int cnt;
ll s[1000010];
ll fac[1000010];
ll ifac[1000010];
ll inv[1000010];
ll f1[1000010];
ll f2[1000010];
ll f[1000010];
ll pre[1000010];
ll suf[1000010];
ll getc(int x,int y)
{
return fac[x]*ifac[y]%p*ifac[x-y]%p;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4126.in","r",stdin);
freopen("bzoj4126.out","w",stdout);
#endif
int n,m;
scanf("%d%d",&n,&m);
if(m==1)
{
printf("%lld\n",ll(n)*(n+1)/2%p);
return 0;
}
n++;
fac[0]=fac[1]=ifac[0]=ifac[1]=inv[1]=1;
for(int i=2;i<=m+2;i++)
{
inv[i]=-p/i*inv[p%i]%p;
ifac[i]=ifac[i-1]*inv[i]%p;
fac[i]=fac[i-1]*i%p;
}
s[0]=0;
s[1]=1;
for(int i=2;i<=m+2;i++)
{
if(!b[i])
{
s[i]=fp(i,m);
pri[++cnt]=i;
}
for(int j=1;j<=cnt&&i*pri[j]<=m+2;j++)
{
b[i*pri[j]]=1;
s[i*pri[j]]=s[i]*s[pri[j]]%p;
if(i%pri[j]==0)
break;
}
}
f1[0]=1;
f2[0]=0;
ll invm=fp(m,p-2);
for(int i=1;i<=m+1;i++)
{
f1[i]=f1[i-1]*invm%p;
f2[i]=(f2[i-1]+s[i-1])*invm%p;
}
ll v1=0,v2=0;
for(int i=0;i<=m+1;i++)
{
v1=(v1+((m+1-i)&1?-1:1)*getc(m+1,i)*f1[i])%p;
v2=(v2+((m+1-i)&1?-1:1)*getc(m+1,i)*f2[i])%p;
}
f[0]=-v2*fp(v1,p-2)%p;
for(int i=1;i<=m+1;i++)
f[i]=(f1[i]*f[0]+f2[i])%p;
if(n<=m+1)
{
ll ans=fp(m,n)*f[n]-f[0];
ans=(ans%p+p)%p;
printf("%lld\n",ans);
return 0;
}
for(int i=0;i<=m;i++)
{
pre[i]=n-i;
if(i)
pre[i]=pre[i-1]*pre[i]%p;
}
for(int i=m;i>=0;i--)
{
suf[i]=n-i;
if(i!=m)
suf[i]=suf[i+1]*suf[i]%p;
}
ll ans=0;
for(int i=0;i<=m;i++)
{
ll v=1;
if(i)
v=v*pre[i-1]%p;
if(i!=m)
v=v*suf[i+1]%p;
ans=(ans+f[i]*v%p*ifac[i]%p*ifac[m-i]%p*((m-i)&1?-1:1))%p;
}
ans=fp(m,n)*ans-f[0];
ans=(ans%p+p)%p;
printf("%lld\n",ans);
return 0;
}
【BZOJ4126】【BZOJ3516】【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 ...
- 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 国王奇遇记——神奇的推式子
先膜一发Miskcoo,大佬的博客上多项式相关的非常全 原题戳我 题目大意 求 \[\sum\limits_{i=1}^{n}i^mm^i\] 题解 设一个函数\(f(i)=\sum\limits_{ ...
- 【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$$ 我们有 ...
- BZOJ3157/BZOJ3516 国王奇遇记(矩阵快速幂/数学)
由二项式定理,(m+1)k=ΣC(k,i)*mi.由此可以构造矩阵转移,将mi*ik全部塞进去即可,系数即为组合数*m.复杂度O(m3logn),因为大常数喜闻乐见的T掉了. #include< ...
- bzoj3157 3516 国王奇遇记
Description Input 共一行包括两个正整数N和M. Output 共一行为所求表达式的值对10^9+7取模的值. 特判m=1 m≠1时: 设S[u]=sigma(i^u*m^i) m*S ...
随机推荐
- UVA - 12716 - 异或序列
求满足GCD(a,b) = a XOR b; 其中1<=b <=a<=n. 首先做这道题需要知道几个定理: 异或:a XOR b = c 那么 a XOR c = b; 那么我们令G ...
- Day1 Numerical simulation of optical wave propagation之标量衍射理论基本原理(一)
<Numerical simulation of optical wave propagation>内容 1. 介绍光波传输的基础理论.离散采样方法.基于MATLAB平台的编码实例以及具 ...
- Podfile语法参考(译)
https://www.jianshu.com/p/8af475c4f717 2015.10.30 19:14* 字数 2496 阅读 35976评论 9喜欢 120 本文翻译自官方的Podfile ...
- 初次使用beego框架
安装beego框架以及bee工具 go get -u github.com/astaxie/beego go get github.com/beego/bee 创建一个新项目 bee new weba ...
- Python解释器有哪些?Python解释器种类
Python是一门解释器语言,代码想运行,必须通过解释器执行,Python存在多种解释器,分别基于不同语言开发,每个解释器有不同的特点,但都能正常运行Python代码,以下是常用的五种Python解释 ...
- 剑指offer(6)
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
- Keras和tensorflow的区别
参考: https://blog.csdn.net/zhangbaoanhadoop/article/details/82111056
- linux安装php7.2.7
1.下载php 官网下载:#wget http://cn2.php.net/get/php-7.2.7.tar.gz/from/a/mirror.(ps:应该是这么下载的,但是我下载的都是一个mirr ...
- AdminLTE 前端框架
适合运维平台 后台管理系统 AdminLTE 是一个开源的后台控制面板和仪表盘 WebApp 模板. 这是一个快速的HTML模板,基于CSS框架的引导. 文档: http://adminlte.la ...
- sublime text3安装代码格式化的步骤
1.首先查看有没有安装package control插件,若没有,进行此链接操作——http://blog.csdn.net/kongguyoulan523/article/details/51144 ...