P5437-[XR-2]约定【拉格朗日差值,数学期望】
正题
题目链接:https://www.luogu.com.cn/problem/P5437
题目大意
\(n\)个点的完全图,连接\(i,j\)的边权值为\((i+j)^k\)。随机选出一个生成树,求期望边权和。
\(1\leq n<998244353,1\leq k\leq 10^7\)
解题思路
一条边选出来的概率是\(\frac{2}{n}\)(总共有\(\frac{2}{n(n-1)}\)条,选\(n-1\)条,或者\(Prufer\)序列也能证明)
所以现在考虑怎么求
\]
这个东西首先\(f(n)=\sum_{i=1}^n\sum_{j=1}^ni+j\)是一个二项式,所以\((i+j)^k\)就是一个\(k+2\)次多项式,所以可以考虑用拉插。
现在是如何快速求出\(1\sim k\)的值,考虑递推
\]
\]
然后用线性筛预处理出\(i^k\)就好了。当然拉插也要用线性的优化
时间复杂度\(O(n)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e7+10,P=998244353;
ll n,k,cnt,pri[N/5],w[N<<1],y[N];
ll pre[N],suf[N],inv[N],ans;
bool v[N<<1];
ll power(ll x,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*x%P;
x=x*x%P;b>>=1;
}
return ans;
}
void Prime(int n){
w[1]=1;
for(ll i=2;i<=n;i++){
if(!v[i])pri[++cnt]=i,w[i]=power(i,k);
for(ll j=1;j<=cnt&&i*pri[j]<=n;j++){
v[i*pri[j]]=1;w[i*pri[j]]=w[i]*w[pri[j]]%P;
if(i%pri[j]==0)break;
}
}
return;
}
signed main()
{
scanf("%lld%lld",&n,&k);
Prime(k*2+6);k+=3;pre[0]=suf[k+1]=inv[1]=1;
y[2]=w[3];
for(ll i=3;i<=k;i++)
y[i]=(y[i-1]+w[i*2-1]+w[i*2-2]-w[i])%P;
for(ll i=1;i<=k;i++)y[i]=(y[i-1]+y[i])%P;
for(ll i=1;i<=k;i++)pre[i]=pre[i-1]*(n-i)%P;
for(ll i=k;i>=1;i--)suf[i]=suf[i+1]*(n-i)%P;
for(ll i=2;i<=k;i++)inv[i]=P-inv[P%i]*(P/i)%P;
inv[0]=1;
for(ll i=1;i<=k;i++)inv[i]=inv[i-1]*inv[i]%P;
for(ll i=1;i<=k;i++)
(ans+=pre[i-1]*suf[i+1]%P*inv[i-1]%P*inv[k-i]%P*y[i]%P*(((k-i)&1)?-1:1))%=P;
printf("%lld\n",(ans+P)%P*power(n,P-2)%P*2%P);
return 0;
}
P5437-[XR-2]约定【拉格朗日差值,数学期望】的更多相关文章
- [51nod]1229 序列求和 V2(数学+拉格朗日差值)
题面 传送门 题解 这种颓柿子的题我可能死活做不出来-- 首先\(r=0\)--算了不说了,\(r=1\)就是个裸的自然数幂次和直接爱怎么搞怎么搞了,所以以下都假设\(r>1\) 设 \[s_p ...
- E - Guess the Root 拉格朗日差值法+交互
题目传送门 题意:告诉你存在一个未知项系数最高为10的$f(x)$,你最多可以有50次询问,每次询问给出一个$x'$,系统会返回你$f(x')$的值,你需要猜一个$x''$,使得$f(x'')=0$, ...
- 奇妙的算法【10】TX--有效号码、最,小耗时、最小差值、差值输出、异或结果
昨晚刚刚写的几道算法题,难度也还行,就是全部AC有些困难,当时第一题AC.第二题AC 60%,第四题AC 40%,第五题没有时间写完了,这个应该全部AC了:其中第三题没有写出来 1,是否存在符合规范的 ...
- JAVA中计算两个日期时间的差值竟然也有这么多门道
上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...
- PHP中比较两个时间的大小与日期的差值
在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst]) 其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的 ...
- 用Scala实现集合中相邻元素间的差值
欢迎转载,转载请注明出处,徽沪一郎. 概要 代码这东西,不写肯定不行,新学Scala不久,将实际遇到的一些问题记录下来,日后也好查找. 今天讲的是如何计算同一集合中元素两两之间的差值,即求开始集合(a ...
- 输出有序数组的中两个元素差值为指定值diff的两个元素
题目: 输出有序数组的中两个元素差值为指定值diff的两个元素. 思路: 这与输出两个元素的和的值为一定值类似,需要两个指针,不同的是:指针不是一左一右,而是一前一后. 如果差值等于diff,则返回: ...
- php 算法之切割数组,不用array_chunk(),算法之二,取数组的差值,不用array_diff()
用php写算法切割数组,不用array_chunk();算法例如以下所看到的. <?php //$array 数组 //$size 每一个数组的个数 //每一个数组元素是否默认键值 functi ...
- 题目1096:日期差值(a-b=(a-c)-(b-c))
http://ac.jobdu.com/problem.php?pid=1096 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每 ...
随机推荐
- 基于taro封装底下浮动弹窗组件
先看效果图: jsx: import Taro, { Component } from '@tarojs/taro' import { View, Image } from '@tarojs/comp ...
- WPF---数据模板(一)
一.场景模拟 假设我们现在有如下需求: 我们需要在ListBox中的每个Item中显示某个成员的姓名.年龄以及喜欢的颜色,点击Item的时候,会在右边显示详细信息,同时也想让ListBox的样式变得好 ...
- uwp 的】listView 选择
xml 代码 ---------------------------------------------------------- <Page x:Class="ContentCont ...
- PQGrid商业化的表格组件
官网地址https://paramquery.com/pro/grid 右侧导航条有目录哟,看着更方便 快速入门 表格构建 API简单介绍 主要研究功能介绍 快速入门 ParamQuery Grid ...
- CentOS7中apache的部署与配置
一.apache的部署 输入命令 yum list | grep httpd 查看可安装的软件包,选择"httpd.x86_64"安装. 输入命令 yum install http ...
- Python代码阅读(第2篇):数字转化成列表
本篇阅读的代码实现了将输入的数字转化成一个列表,输入数字中的每一位按照从左到右的顺序成为列表中的一项. 本篇阅读的代码片段来自于30-seconds-of-python. digitize def d ...
- Ubuntu下 QT中配置ROS-Kinetic
打开qtcreater自动加载ros环境,通过修改*.desktop文件 gedit ~/.local/share/applications/qtcreator.desktop 将其中Exec=XXX ...
- 问题:idea 中文无法使用
1. 问题--idea无法使用中文输入 原因:idea本身版本过高,所以需要你强制减低它的jdk版本 解决:使用配置idea环境变量解决 ps:目前适用于任何版本的jdk和idea 步骤: 1.新建 ...
- Django项目从创建到运行
环境: Windows Server 2008 R2 标准版 1.安装python运行环境(省略) 2.安装Django pip install Django==3.1.5 # 不写版本号也可以 3. ...
- 了解mysql concat()函数
concat(arg1,arg2,....):将形参对应字段的值组合成一个字符串 假设:现在有一张学生表(test_user) 将这三个字段组合成一个字符串作为第四个字段 select test_us ...