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

数列是递增的,可以枚举第二小的数,假设选第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. iOS:你App的设置做对了吗?

    http://www.cocoachina.com/ios/20151217/14707.html iOS 8及以上版本最不为人知的一个特点是与应用设置的深层链接,用户可以根据APP的需要授权启用位置 ...

  2. win7 powershell版本过低问题

    那台win8系统的笔记本电脑 硬盘坏掉后  在win7系统的台式机上使用 vagrant up 提示版本过低 The version of powershell currently installed ...

  3. SAS信用评分之番外篇异常值的识别

    SAS信用评分之番外篇异常值的识别 今天想分享给大家的是我早期建模的时候一个识别异常值的办法,也许你在"信用风险评分卡研究"看过,但是代码只能识别一个变量,我将这个代码作了改良,但 ...

  4. C++:for范围循环特点--自我理解

    for(declaration : expression)statement for(xx-type i : P)....其一:for范围类型循环在循环前,可能会对p所在的队列里,对每一个对象进行一次 ...

  5. 使用哈工大LTP进行文本命名实体识别并保存到txt

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/broccoli2/article/det ...

  6. Java练习 SDUT-3337_计算长方体、四棱锥的表面积和体积

    计算长方体.四棱锥的表面积和体积 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 计算如下立体图形的表面积和体积. 从图 ...

  7. Java练习 SDUT - 2669_2-2 Time类的定义

    2-2 Time类的定义 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 通过本题目的练习可以掌握类与对象的定义: 设计 ...

  8. 《C程序设计语言》笔记(三)

    六:结构 1:结构体声明中,比如: struct point{ int x; int y; }; struct后面的名字是可选的,称为结构标记.结构成员.结构标记和普通变量可以采用相同的名字,它们之间 ...

  9. ES6对象的super关键字

    super是es6新出的关键字,它既可以当作函数使用,也可以当作对象使用,两种使用方法不尽相同 1.super用作函数使用的时候,代表父类的构造函数,es6规定在子类中使用this之前必须先执行一次s ...

  10. 13条必知必会&&测试

    1.13条必知必会 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> get(**kwargs) ...