【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 ...
随机推荐
- Appium+Python3+iOS定位元素
前言: 最近在做IOS自动化测试,IOS的Appium环境都配置OK,执行起来真的慢,慢到怀疑人生,那么今天就来总结一下IOS定位方式和各个定位方式的速度排序. 据我观察,按查找元素的顺序速度,从快到 ...
- python全栈开发慕课网
前端 web框架: flask:简单.轻量.灵活性大 (官网,stck overflowa); 目录结构:配置,发布,资源,日志,测试... 前后端协作:整体发布,前后端分离发布 django:简单, ...
- Innodb日志与事务
1.Innodb日志: 错误日志:记录出错信息,也记录一些警告信息或者正确的信息. 查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行. 慢查询日志:设置一个阈值,将运行时间超过该 ...
- 提取PPT文件中的Vba ProjectStg Compressed Atom。Extract PPT VBA Compress Stream
http://msdn.microsoft.com/en-us/library/cc313106(v=office.12).aspx 微软文档 PartI ********************* ...
- 学习yii2.0——行为
学习yii框架的行为之前,需要先了解yii的事件,可以参考这篇博客: 怎么理解行为 yii框架的行为有点类似于trait,可以有个大体的概念: 1.有一个类A,包含一些属性和方法,很普通的一个类A. ...
- 接口工具之postman
在我们日常开发中,经常会对功能接口进行相应的测试.那么postman是一款不错的测试工具,因为平常使用的比较多,因此在这里简单记录一下,经常使用到的一些地方 简单的使用就不错介绍了, 基本流程: 新建 ...
- vue router 根据不同的id切换链接界面不刷新
我们一般使用vue的router时候会根据不同的id来切换界面,但是界面没有立刻刷新.下面我们讲下如何解决这个问题. html: <template> <div id="a ...
- node错误中间件处理 express类 带有路由操作
let express = require('express'); let app = new express(); let bodyParser = require('body-parser'); ...
- Java多线程1:进程与线程的概念、区别和联系
一.进程的的概念 引用线程之前进程的概念: 进程是表示资源分配的基本单位,也是调度运行的基本单位.例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括内存空间.磁盘空间.I/O设备等.然 ...
- centos无网络问题