gu集合
离散型随机变量的一切可能的取值
与对应的概率
乘积之和称为该离散型随机变量的数学期望,本题期望是概率乘得分之和
数列是递增的,可以枚举第二小的数,假设选第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集合的更多相关文章
- UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十六场
E: 飞碟解除器 •题目描述 wjyyy在玩跑跑卡丁车的时候,获得了一个飞碟解除器,这样他就可以免受飞碟的减速干扰了.飞碟解除器每秒末都会攻击一次飞碟,但每次只有p/q的概率成功攻击飞碟.当飞碟被成功 ...
- UPC 2019年第二阶段我要变强个人训练赛第十六场
传送门: [1]:UPC比赛场 [2]:UPC补题场 F.gu集合(数论) •题目描述 题目描述: Dew有一个长为n的集合S. 有一天,他想选k个不同的元素出来做游戏. 但是Dew只有两只手,所以他 ...
- 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 ...
- python基本数据类型之集合
python基本数据类型之集合 集合是一种容器,用来存放不同元素. 集合有3大特点: 集合的元素必须是不可变类型(字符串.数字.元组): 集合中的元素不能重复: 集合是无序的. 在集合中直接存入lis ...
- Python爬虫防封杀方法集合
Python爬虫防封杀方法集合 mrlevo520 2016.09.01 14:20* 阅读 2263喜欢 38 Python 2.7 IDE Pycharm 5.0.3 前言 ...
- 转:Mybatis系列之集合映射
转:Mybatis系列之集合映射 上篇文章我们讲了关联映射,实现了销售与登录用户之间的关联.本文我们接着来讲一讲集合映射,实现销售与客户的多对多关系. 实现销售与客户多对多关系 本文中仍延用<M ...
- 51nod 1301 集合异或和——异或dp
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301 好题!看了TJ才会. 因为是不可重集合,所以当然有前 i 个 ...
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- .Net多线程编程—并发集合
并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...
随机推荐
- iOS:你App的设置做对了吗?
http://www.cocoachina.com/ios/20151217/14707.html iOS 8及以上版本最不为人知的一个特点是与应用设置的深层链接,用户可以根据APP的需要授权启用位置 ...
- win7 powershell版本过低问题
那台win8系统的笔记本电脑 硬盘坏掉后 在win7系统的台式机上使用 vagrant up 提示版本过低 The version of powershell currently installed ...
- SAS信用评分之番外篇异常值的识别
SAS信用评分之番外篇异常值的识别 今天想分享给大家的是我早期建模的时候一个识别异常值的办法,也许你在"信用风险评分卡研究"看过,但是代码只能识别一个变量,我将这个代码作了改良,但 ...
- C++:for范围循环特点--自我理解
for(declaration : expression)statement for(xx-type i : P)....其一:for范围类型循环在循环前,可能会对p所在的队列里,对每一个对象进行一次 ...
- 使用哈工大LTP进行文本命名实体识别并保存到txt
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/broccoli2/article/det ...
- Java练习 SDUT-3337_计算长方体、四棱锥的表面积和体积
计算长方体.四棱锥的表面积和体积 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 计算如下立体图形的表面积和体积. 从图 ...
- Java练习 SDUT - 2669_2-2 Time类的定义
2-2 Time类的定义 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 通过本题目的练习可以掌握类与对象的定义: 设计 ...
- 《C程序设计语言》笔记(三)
六:结构 1:结构体声明中,比如: struct point{ int x; int y; }; struct后面的名字是可选的,称为结构标记.结构成员.结构标记和普通变量可以采用相同的名字,它们之间 ...
- ES6对象的super关键字
super是es6新出的关键字,它既可以当作函数使用,也可以当作对象使用,两种使用方法不尽相同 1.super用作函数使用的时候,代表父类的构造函数,es6规定在子类中使用this之前必须先执行一次s ...
- 13条必知必会&&测试
1.13条必知必会 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> get(**kwargs) ...