离散型随机变量的一切可能的取值  与对应的概率  乘积之和称为该离散型随机变量的数学期望,本题期望是概率乘得分之和

数列是递增的,可以枚举第二小的数,假设选第i个数为第2小的数,则第1小的数有i-1种选择,其余k-2个数,在第i+1~n个数中选择,得出选第i个数为第2小的数的概率为:

为求概率,要先预处理阶乘。我们知道(p*q)%m=(p%m)*(q%m)%m,但这个算式还有除法,需要用到逆元,我用的是阶乘的逆元 ,所以再预处理一下阶乘的逆元。

这样概率就求出来啦。

再求得分 c^g(T)!

很显然g(T)为我们枚举的第2小的数的值

我们知道(p*q)%m=(p%m)*(q%m)%m,但仔细观察一下这个规则没法求c^g(T)!,两者没有直接的关系,这地方很容易出错。

可以用费马小定理来求c^g(T)!  费马小定理:如果p是一个质数,而整数a不是p的倍数,则有a^(p-1)≡1(mod p)。

根据小定理我们发现,如果p是一个质数,a的整数次幂%p是周期性的,(a^0)%p=1,[a^(p-1)]%p=1,所以指数从0~p-2是一个周期,而998244353确实是质数,我们就可以把指数%(p-1),也就是把阶乘%(p-1),再把整个幂%p来求c^g(T)!,这里同样需要预处理阶乘。

这样期望就求出来啦。

因为好多数据需要预处理,超了一次内存,修改思路比较笨拙,就不多讲了。

#include<bits/stdc++.h>
#define ll long long
#define scl(x) scanf("%lld",&x)
#define sc(x) scanf("%d",&x)
using namespace std;
int p=; int inv[];
int s[];
int fc[];
int fc2[];
int kk=;
int tt=; ll pw(ll a,ll n,ll m)//快速幂
{
if(n==)return ;
ll x=pw(a,n/,m);
ll ans=(ll)x*x%m;
if(n%==)ans=ans*a%m;
return (ll)ans;
} int main()
{
fc[]=;
fc[]=;
ll mn;
for(int i=;i<=tt;i++)//阶乘%p
{
mn=(ll)fc[i-]*i;
mn%=p;
fc[i]=mn;
} fc2[]=;
fc2[]=;
for(int i=;i<=tt;i++)//阶乘%(p-1)
{
mn=(ll)fc2[i-]*i;
mn%=(p-);
fc2[i]=mn;
} inv[kk]=pw(fc[kk],p-,p);
for(int i=kk-;i>=;i--)//阶乘逆元
{
mn=(ll)inv[i+]*(i+);
mn%=p;
inv[i]=mn;
} int n,k;
ll c;
sc(n);
sc(k);
scl(c); for(int i=;i<=n;i++)
scl(s[i]); ll anss=;
for(int i=;k-<=n-i;i++)//计算期望
{
ll temp=i-;
temp*=k;
temp*=(k-);
temp%=p;
temp*=(ll)fc[n-i];
temp%=p;
temp*=(ll)fc[n-k];
temp%=p;
temp*=(ll)inv[n];
temp%=p;
temp*=(ll)inv[n-i-k+];
temp%=p;
ll g=s[i];
ll temp2=pw(c,fc2[g],p);
anss+=temp*temp2;
anss%=p;
}
printf("%lld\n",anss);
}

gu集合的更多相关文章

  1. UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十六场

    E: 飞碟解除器 •题目描述 wjyyy在玩跑跑卡丁车的时候,获得了一个飞碟解除器,这样他就可以免受飞碟的减速干扰了.飞碟解除器每秒末都会攻击一次飞碟,但每次只有p/q的概率成功攻击飞碟.当飞碟被成功 ...

  2. UPC 2019年第二阶段我要变强个人训练赛第十六场

    传送门: [1]:UPC比赛场 [2]:UPC补题场 F.gu集合(数论) •题目描述 题目描述: Dew有一个长为n的集合S. 有一天,他想选k个不同的元素出来做游戏. 但是Dew只有两只手,所以他 ...

  3. Python学习笔记——基础篇1【第三周】——set集合

    set集合 不允许重复的元素出现(相当于特殊的列表) set 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 练习:寻找差异 # 数据库中原有 old_dic ...

  4. python基本数据类型之集合

    python基本数据类型之集合 集合是一种容器,用来存放不同元素. 集合有3大特点: 集合的元素必须是不可变类型(字符串.数字.元组): 集合中的元素不能重复: 集合是无序的. 在集合中直接存入lis ...

  5. Python爬虫防封杀方法集合

      Python爬虫防封杀方法集合     mrlevo520 2016.09.01 14:20* 阅读 2263喜欢 38       Python 2.7 IDE Pycharm 5.0.3 前言 ...

  6. 转:Mybatis系列之集合映射

    转:Mybatis系列之集合映射 上篇文章我们讲了关联映射,实现了销售与登录用户之间的关联.本文我们接着来讲一讲集合映射,实现销售与客户的多对多关系. 实现销售与客户多对多关系 本文中仍延用<M ...

  7. 51nod 1301 集合异或和——异或dp

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301 好题!看了TJ才会. 因为是不可重集合,所以当然有前 i 个 ...

  8. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  9. .Net多线程编程—并发集合

    并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...

随机推荐

  1. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION) 学习目标 ...

  2. bzoj1060 时态同步

    Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板 ...

  3. PHP验证码文件类

    转自:http://www.blhere.com/1165.html 12345678910111213141516171819202122232425262728293031323334353637 ...

  4. ps学习教程

    1.通道抠图:http://www.16xx8.com/photoshop/tongdaokoutu/

  5. vue页面内监听路由变化

    beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `this` // 因为当钩子执行前,组件实 ...

  6. jmeter循环和计数器

  7. GMTC2019|闲鱼-基于Flutter的架构演进与创新

    2012年应届毕业加入阿里巴巴,主导了闲鱼基于Flutter的新混合架构,同时推进了Flutter在闲鱼各业务线的落地.未来将持续关注终端技术的演变及趋势 Flutter的优势与挑战 Flutter是 ...

  8. ASCII代码表

    >>ASCII代码表<<

  9. dev stg prd 开发 测试 生产环境

    dev development 开发环境stg stage 测试环境prd product 线上环境

  10. oracle函数 ln(y)

    [功能]返回以e为底的y的对数(e为数学常量) [参数]y,数字型表达式 (条件y>0) [返回]数字 [示例] select exp(3),exp(-3),ln(20.0855369),ln( ...