Portal -->CF601C

Description

  大概是说\(m\)个人参加\(n\)场比赛,每场一人有一个排名,每场没有两个人排名相同,一个人最后的得分是\(n\)场比赛的排名相加,现在已知其中一个人(叫做\(A\)好了)\(n\)场比赛的排名,求最后按照得分降序排列后,这个人的期望排名

Solution

  这题一开始有点无从下手(流下蒟蒻的泪水)

  那。。冷静分析一波,首先我们要求的答案应该是:总分\(<=\)自己得分(记为\(score\)好了)的期望人数+1

  然后因为除去\(A\)这个人,其他的\(m-1\)个人的情况是相同的,期望人数可以由:概率*(m-1)来得到

  那所以我们现在就只考虑一个人(剩下的\(m-1\)个人中的一个),要求这个人总分\(<=score\)的概率

  我们记\(f[i][j]\)表示这个人经过\(i\)场比赛之后,总分为\(j\)的概率,那么我们可以得到转移式子:

\[f[i][j]=\sum\limits_{k=1,k!=rank[i]}^{min(m,j)}f[i-1][j-k]
\]

  这里的\(rank[i]\)表示的是\(A\)在第\(i\)场比赛中的排名,这个转移的具体意义就是枚举这个人在第\(i\)场的排名,然后上界为\(min(m,j)\)是因为只有\(m\)个人,\(k!=rank[i]\)是因为没有两个人在同一场排名相同,所以这个人的排名不能是\(A\)在这场的排名

  具体怎么求的话,我们可以把这个东西写成一个前缀和的形式,我们多开一个数组\(sum[i][j]=\sum\limits_{k=0}^{j-1}f[i][j]\),特别的所有的\(sum[i][0]=0\)

  然后前缀和一下再把\(f[i][rank[i]]\)减掉就好了,最后的答案就是\(sum[n][score]*(m-1)+1\)

  空间比较大所以可以考虑滚动数组,然后如果我没用long double的话。。好像会爆精度qwq可能是因为写挫了qwq(以及因为某种奇怪的原因cf上面好像。。直接printf一个long double会出锅qwq)

  

  代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=110,MX=100010;
long double p[2][MX],sum[2][MX];//sum[x]=\sum_{i=0}{x-1} p[i]
int rk[N];
int n,m,score; int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
scanf("%d%d",&n,&m);
score=0;
for (int i=1;i<=n;++i) scanf("%d",rk+i),score+=rk[i];
int pre=0,now=1,l,r;
p[0][0]=1;
for (int i=1;i<=n*m;++i) sum[0][i]=1;
if (m==1){printf("%d\n",1);return 0;}
for (int i=1;i<=n;++i){
memset(p[now],0,sizeof(p[now]));
sum[now][0]=0; sum[now][1]=0;
for (int j=1;j<=n*m+1;++j){
l=max(0,j-m),r=j;
p[now][j]+=(sum[pre][r]-sum[pre][l])/(1.0*(m-1));
if (j-rk[i]>=0)
p[now][j]-=p[pre][j-rk[i]]/(1.0*(m-1));
sum[now][j+1]=sum[now][j]+p[now][j];
}
swap(now,pre);
}
printf("%.15Lf\n",sum[pre][score]*(m-1)+1.0);
}

【CF601C】Kleofáš and the n-thlon的更多相关文章

  1. 【codeforces 602E】Kleofáš and the n-thlon

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  4. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  6. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  7. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  8. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  9. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

随机推荐

  1. 利用工厂模式实现serviec层和dao层解耦

    利用工厂模式实现serveice和dao层的解耦,这样就可以不用在service层实例化dao层的对象,当dao层代码发生改变的时候(数据库实现发生改变)直接修改配置文件就不用改变service层的代 ...

  2. HTTP协议请求信息详解

    通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息.客户端向服务器发送一个请求,请求头包含请求的方法.URI.协议版本.以及包含请求修饰符.客户信息和内容的类似于MIME的消息结构 ...

  3. 合并SQL 调优

    SELECT le.equipcode,sum(case when wo.ordertype=0 then 1 else 0 END) as wxcount,sum(case when wo.orde ...

  4. HP VC模块Shared uplink Sets配置参考

    首先配置MAC地址的分配方式 在左侧导航栏中,点解"MAC Addresses" 选择VC分配MAC地址,并且选择一个合适的地址段,点击"Apply"继续 在弹 ...

  5. 剑指offer-二维数组中的查找01

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  6. 5个最优秀的微信小程序UI组件库

    开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面5款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...

  7. php作用域限定符

    双冒号::被认为是作用域限定操作符,用来指定类中不同的作用域级别.::左边表示的是作用域,右边表示的是访问的成员. 系统定义了两个作用域,self和parent.self表示当前类的作用域,在类之外的 ...

  8. Visiting a Friend(思维)

    Description Pig is visiting a friend. Pig's house is located at point 0, and his friend's house is l ...

  9. 作业MathExamV2.0

    MathExam233 211614269 林凯 211601233张康凌 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时( ...

  10. OOP 1.4 内联函数和重载函数函数参数缺省值

    1.内联函数 存在的背景:函数调用存在开销(调用时候参数压栈,返回地址压栈:返回时从栈取出返回地址,跳转到返回地址.总共需要几条指令的开销).如果函数指令较少,调用多次,函数调用的开销占比大. 内联函 ...