BZOJ 5093[Lydsy1711月赛]图的价值 线性做法
博主曾更过一篇复杂度为$O( k· \log k)$的多项式做法在这里
惊闻本题有$ O(k)$的神仙做法,说起神仙我就想起了于是就去学习了一波
幂与第二类斯特林数
$$ x^k=\sum_{j=0}^kj!\binom{x}{j}\begin{Bmatrix}k\\j\end{Bmatrix}$$
$$ \begin{Bmatrix}k\\j\end{Bmatrix}=\frac{1}{j!}\sum_{i=0}^ji^k\binom{j}{i}(-1)^{j-i}$$
以上是两个非常实用的公式
推式子
现在开始推式子
原博文已经推出了我们真正需要求的是$ f(n,k)=\sum\limits_{i=0}^n\binom{n}{i}i^k$
根据上面的公式可以推得
$$
\begin{aligned}
f(n,k) & =\sum_{i=0}^n\binom{n}{i}i^k=\sum_{j=0}\begin{Bmatrix}k\\j\end{Bmatrix}\frac{n!}{(n-j)!}2^{n-j}\\
& =\sum_{j=0}^k\frac{n!}{(n-j)!}2^{n-j}\frac{1}{j!}\sum_{i=0}^j(-1)^{j-i}\binom{j}{i}i^k\\
&=\sum_{j=0}^k\binom{n}{j}2^{n-j}\sum_{i=0}^j(-1)^{j-i}\binom{j}{i}i^k\\
&=\sum_{i=0}^k\binom{n}{i}i^k\sum_{j=i}^k2^{n-j}(-1)^{j-i}\binom{n-i}{j-i}\\
&=\sum_{i=0}^k\binom{n}{i}i^k2^{n-i}\sum_{j=0}^{k-i}\binom{n-i}{j}(-\frac{1}{2})^j
\end{aligned}
$$
我们需要快速递推出$A(i)=\displaystyle\sum_{j=0}^{k-i}\binom{n-i}{j}(-\frac{1}{2})^j$
再推波式子得
$$
\begin{aligned}
\sum_{j=0}^{k-i}\binom{n-i}{j}(-\frac{1}{2})^j&=\sum_{j=0}^{k-i}\left(\binom{n-i-1}{j}+\binom{n-i-1}{j-1}\right)(-\frac{1}{2})^j\\
&=\sum_{j=1}^{k-i}(-\frac{1}{2})^j\binom{n-i-1}{j-1}+\sum_{j=0}^{k-i}(-\frac{1}{2})^j\binom{n-i-1}{j}\\
&=-\frac{1}{2}\sum_{j=0}^{k-i-1}(-\frac{1}{2})^j\binom{n-i-1}{j}+\sum_{j=0}^{k-i}(-\frac{1}{2})^j\binom{n-i-1}{j}\\
&=\frac{1}{2}\sum_{j=0}^{k-i-1}(-\frac{1}{2})^j\binom{n-i-1}{j}+(-\frac{1}{2})^{k-i}\binom{n-i-1}{k-i}
\end{aligned}
$$
因此$A(i)=\frac{1}{2}A(i+1)+(-\frac{1}{2})^{k-i}\binom{n-i-1}{k-i}$
就假装推完了
大常数代码
#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#define p 998244353
#define inv2 499122177
#define rt register int
#define ll long long
using namespace std;
inline ll read(){
ll x = ; char zf = ; char ch = getchar();
while (ch != '-' && !isdigit(ch)) ch = getchar();
if (ch == '-') zf = -, ch = getchar();
while (isdigit(ch)) x = x * + ch - '', ch = getchar(); return x * zf;
}
void write(ll y){if(y<)putchar('-'),y=-y;if(y>)write(y/);putchar(y%+);}
void writeln(const ll y){write(y);putchar('\n');}
int i,j,k,m,n,x,y,z,cnt;
int ksm(int x,int y=p-){
int ans=;
for(rt i=y;i;i>>=,x=1ll*x*x%p)if(i&)ans=1ll*ans*x%p;
return ans;
}
int inv[],A[];
int v[],ss[];bool b[];
int main(){
n=read()-;k=read();
inv[]=inv[]=;
v[]=;v[]=(k==);
for(rt i=;i<=k;i++){
if(!b[i])ss[++cnt]=i,v[i]=ksm(i,k);
for(rt j=;i*ss[j]<=k&&j<=cnt;j++){
b[i*ss[j]]=;v[i*ss[j]]=1ll*v[i]*v[ss[j]]%p;
if(i%ss[j]==)break;
}
}
for(rt i=;i<=k;i++)inv[i]=1ll*inv[p%i]*(p-p/i)%p;
int ans=;
if(n<=k){
for(rt i=,c=;i<=n;c=1ll*(n-i)*inv[i+]%p,i++)
ans+=1ll*c*v[i]%p;
cout<<(1ll*ans*(n+)%p*ksm(,(ll)n*(n-)/%(p-))%p+p)%p;
return ;
} A[k]=;
for(rt i=k-,y=-inv2,c=n-i-;i>=;i--,y=1ll*y*-inv2%p){
A[i]=(1ll*A[i+]*inv2%p+1ll*c*y%p)%p;
c=1ll*c*(n-i)%p*inv[k-i+]%p;
} for(rt i=,d=ksm(,n),c=;i<=k&&i<=n;c=1ll*c*(n-i)%p*inv[i+]%p,i++,d=1ll*d*inv2%p)
(ans+=1ll*c*v[i]%p*d%p*A[i]%p)%=p;
cout<<(1ll*ans*(n+)%p*ksm(,(ll)n*(n-)/%(p-))%p+p)%p;
return ;
}
BZOJ 5093[Lydsy1711月赛]图的价值 线性做法的更多相关文章
- bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数
[Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 245 Solved: 128[Submit][Status][D ...
- BZOJ 5093: [Lydsy1711月赛]图的价值
第二类斯特林数模版题 需要一些组合数的小$ trick$ upd:这里更新了本题巧妙的$ O(k)$做法,虽然常数很大就是了 传送门:here 题意:求所有$ n$个节点的无重边自环图的价值和,定义一 ...
- BZOJ 5093: [Lydsy1711月赛]图的价值 第二类斯特林数+NTT
定义有向图的价值为图中每一个点的度数的 \(k\) 次方之和. 求:对于 \(n\) 个点的无向图所有可能情况的图的价值之和. 遇到这种题,八成是每个点单独算贡献,然后累加起来. 我们可以枚举一个点的 ...
- bzoj 5093 [Lydsy1711月赛]图的价值——第二类斯特林数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 不要见到组合数就拆! 枚举每个点的度数,则答案为 \( n*\sum\limits_{ ...
- BZOJ.5093.[Lydsy1711月赛]图的价值(NTT 斯特林数)
题目链接 对于单独一个点,我们枚举它的度数(有多少条边)来计算它的贡献:\[\sum_{i=0}^{n-1}i^kC_{n-1}^i2^{\frac{(n-2)(n-1)}{2}}\] 每个点是一样的 ...
- 【bzoj5093】 [Lydsy1711月赛]图的价值 组合数+斯特林数+NTT
Description "简单无向图"是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向 ...
- 【bzoj5093】[Lydsy1711月赛]图的价值(NTT+第二类斯特林数)
题意: 给定\(n\)个点,一个图的价值定义为所有点的度数的\(k\)次方之和. 现在计算所有\(n\)个点的简单无向图的价值之和. 思路: 将式子列出来: \[ \sum_{i=1}^n\sum_{ ...
- bzoj5093:[Lydsy1711月赛]图的价值
题目 首先考虑到这是一张有标号的图,每一个点的地位是相等的,因此我们只需要求出一个点的价值和乘上\(n\)就好了 考虑一个点有多少种情况下度数为\(i\) 显然我们可以让除了这个点的剩下的\(n-1\ ...
- BZOJ5093 [Lydsy1711月赛]图的价值 【第二类斯特林数 + NTT】
题目链接 BZOJ5093 题解 点之间是没有区别的,所以我们可以计算出一个点的所有贡献,然后乘上\(n\) 一个点可能向剩余的\(n - 1\)个点连边,那么就有 \[ans = 2^{{n - 1 ...
随机推荐
- WPF C# 命令的运行机制
1.概述 1.1 WPF C# 命令的本质 命令是 WPF 中的输入机制,它提供的输入处理比设备输入具有更高的语义级别. 例如,在许多应用程序中都能找到的“复制”.“剪切”和“粘贴”操作就是命令. W ...
- Mysql 创建事件任务
DELIMITER $$ CREATE DEFINER=`root`@`%` EVENT `test` ON SCHEDULE EVERY 1 DAY STARTS '2019-02-12 00:00 ...
- pytorch中文文档-torch.nn常用函数-待添加-明天继续
https://pytorch.org/docs/stable/nn.html 1)卷积层 class torch.nn.Conv2d(in_channels, out_channels, kerne ...
- 12 Django Rest Swagger生成api文档
01-简介 Swagger:是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文件系统源代码作为服务器以同样的速度来更新.当接口有变动时,对应的接 ...
- linux-高并发与负载均衡-lvs-DR模型试验
先配置3台虚拟机的网络 3台虚拟机克隆的方法:(....) etho,配置在同一个网段 DIP,RIP在一个网段 node01:作为lvs负载均衡服务器 node02:作为 Real Server n ...
- day08(字符编码,字符与字节,文件操作)
一,复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int: int('10') | int('-10') | int('0') | float(' ...
- flutter 主题切换
### 主题 ``` // 1.main主文件 import 'package:flutter_smart_park/config/theme.dart' show AppTheme; Provide ...
- POJ 2411 Mondriaan's Dream -- 状压DP
题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...
- 1、Mysql无法创建外键的原因 2、MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1. 两个字段的类型或者大小不严格匹配.例如,如果一个 ...
- 浅谈kafka streams
随着数据时代的到来,数据的实时计算也越来越被大家重视.实时计算的一个重要方向就是实时流计算,目前关于流计算的有很多成熟的技术实现方案,比如Storm.Spark Streaming.flink等.我今 ...