首页 > 其他分享 >P10668 列队春游

P10668 列队春游

时间:2024-07-30 21:50:00浏览次数:10  
标签:frac sum 个数 times leq num 春游 列队 P10668

题目本身很简单,但是可以加强。

P10668 列队春游

题目大意:

给你一个 \(n\) 个数,你可以等概率随机一种排列 \(h\)。

定义 \(\mathrm{pre}_i\) 为最大的 \(j\lt i\) 满足 \(h_j\ge h_i\)(如果不存在,规定为 \(0\))。

求出 \(\displaystyle \sum_{i=1}^n (i-\mathrm{pre}_i)\) 的期望值,保留两位小数输出。

题目思路:

原版:

首先,对于原本的题目的数据强度:\(1\leq n\leq 300\),\(1\leq h_i\leq 1000\),我们可以直接枚举第 \(i\) 个数在 \(j\),上一个比它大的数在 \(k\),那它对期望的贡献就是:

\[\frac{1}{n} \times \frac{A_{num\{ h_x < h_i \}}^{j-k}}{A_{n-1}^{j-k}} \times \frac{num\{ h_x \ge h_i \}}{n-(j-k+1)} \times (j-k) \]

特别的,当 \(k=0\) 即 \(j\) 前面没有大于 \(h_j\) 的数,则答案为:

\[\frac{1}{n} \times \frac{A_{num\{ h_x < h_i \}}^j}{A_{n-1}^j} \times j \]

直接预处理大于某一个值的 \(h_i\) 的数量。复杂度最多 \(O(n^3)\)。

加强版:

我们考虑,如果数据变成了 \(1\leq n\leq 1e5\),\(1\leq h_i\leq 1e7\) 之后我们怎么求解。

首先,\(O(n^3)\) 是肯定不行了,要变换思路。

我们反过来考虑,对于某个 \(h_i\),只有小于 \(h_i\) 的数可以产生贡献,假设数量为 \(sum\)。

那么我们先把这 \(sum\) 都拿出来,剩下的数都是大于等于 \(h_i\) 的,之后再将这 \(sum\) 个数不停插入。这时,这 \(n-sum\) 个数产生了 \(n-sum+1\) 个间隙,发现插入的 \(sum\) 个数只有插在 \(i\) 之前的空隙才会产生贡献,贡献为 \(1\),所以总共会给期望产生 \(\frac{sum}{n-sum+1} \times 1\) 的贡献。

有个小优化,就是大小相同的数可以统一计算。

然后这道题就结束了,具体看代码。

Code:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline int read(){
	int rt=0;	char g=getchar();
	while(g<'0'||g>'9')	g=getchar();
	while(g>='0'&&g<='9')	rt=(rt<<3)+(rt<<1)+g-'0',g=getchar();
	return rt;
}
int n,a[1000006],sum,num;
int ck[10000005];
double ans;
int main()
{
	ans=n=read();
	for(int i=1;i<=n;i++)	ck[a[i]=read()]++;
	sort(a+1,a+1+n);	a[0]=a[1]-1;
	for(int i=1;i<=n;i++)	if(a[i]!=a[i-1])	a[++num]=a[i];
	for(int i=1;i<=num;i++)
		ans+=1.0*sum*ck[a[i]]/(n-sum+1),sum+=ck[a[i]];
	printf("%.2lf",ans);
	return 0;
}

标签:frac,sum,个数,times,leq,num,春游,列队,P10668
From: https://www.cnblogs.com/Jack-YT/p/18333258

相关文章

  • P10668 BZOJ2720 [Violet 5] 列队春游
    P10668BZOJ2720[Violet5]列队春游期望考虑每个元素什么情况下会产生贡献,然后分别贡献到答案中。当当前枚举的数\(h_i\)在\(i\)与\(pre_i\)之间有一个数字时那么会有对当前方案会有\(1\)的贡献。不妨将严格小于\(h_i\)的数的数量记为\(s_i\),则大于等于\(h_i\)的......
  • ## BZOJ2720 [Violet 5] 列队春游 题解
    Problem对于一个数列\(S\),\(S_0=\infty\),设对于\(S_i\),\(S_{a_i}\)是\(S_i\)之前第一个大于等于\(S_i\)的数。给定\(S\)中的元素,求\(\sum_{i=1}^{n}(i-a_i)\)的期望。Solution我们考虑对于每一种身高的学生,分别统计期望。显然,对于身高为\(h\)的学生,只有身高为\(......
  • 列队春游|概率期望|题解
    题面解析前言,此处所述为\(O(n^2)\)算法,暂时未推出\(O(n)\)的算法,后续可能会更新。题意非常明白,不多赘述。我们去考虑单个位置的概率,维护每个人放在该位置对该位置期望的贡献。以这个思想作为切入点,我们思考,对于一个序列来说,如果它的长度是定的。设总人数为n,当前我们考虑......
  • [BZOJ2720 Violet 5]列队春游(概率期望+组合数学)
    列队春游问题描述输入格式:输出格式:样例输入:3123样例输出:4.33提示思路根据期望的线性性质,我们可以枚举每种可能的视野,然后求和对于每种视野,其期望为该种视野的视野长度*该种视野的概率设某个小朋友的视野期望为\(ans\),她的视野长度为\(L\)由于前面......
  • 列队春游
    $\quad$实在蒟蒻,不看题解就只能对着电脑发呆,想了一个脚指头都能想出来的\(O(n\timesn!)\)的暴力做法。$\quad$也是看了好多题解才大概明白式子推法。$\quad$先考虑枚举每个可能的视野长度,那么就会有;\begin{aligned}ans&=\sum_{i=1}^{n}{i\timesP(i)}\\&=\sum_{......
  • 086、和晋陵陆丞早春游望
    086、和晋陵陆丞早春游望唐●杜审言独有宦游人,偏惊物候新。云霞出海曙,梅柳渡江春。淑气催黄鸟,晴光转绿......
  • 鲜花 #2 2024 年春游吐槽
    说是春游,还不如说是夏游。去的安的童话森林公园,说是童话,实际上就是种菜的。饭难吃的要死,而且工作人员的态度相当恶劣。说是下河摸鱼,实际上就是在浑水里面乱撞,而且水深的要死,根本看不到有鱼,说是放了\(300\)条鱼,实际上就没几条。水底除了泥巴就是石头,一会鞋陷进去了,一会就是磕......
  • P4559 [JSOI2018] 列队 题解
    题目链接:列队半年前mark的题,结果现在一下子就会做了。顺便写写我的手玩过程和复杂度说明。考虑比较特殊的情况:比较特殊的,发现从黑色到红色区间我们无论咋选择,由于\(\left|a_{right}-a_{left}\right|\),这玩意如果\(right\)表示红色的一边,那么这个绝对值可以直接拆掉,那么......
  • 缩小数据范围——nc2.4多校_A.新春游戏之数学系列
    目录问题概述思路分析参考代码做题反思问题概述原题参考A.新春游戏之数学系列大致就是给出一个数组,要求求出一个公式的值,有几个数据范围值得注意一下,一是数组的长度为[0,1e6],二是数组元素的和不超过5e7思路分析赛时第一眼准备去分析公式看看有没有可以优化的,用前缀拆分优化......
  • 列队
    像这种大题,我们可以先直接按正解想,如果没啥思路,就转而考虑部分分,部分分会给我们提示的最小的部分分就不说了,纯暴力看一下\(x_i=1\)的部分分显然除了第一行,其他都是摆设,所以把第一行和最后一列放在一起考虑然后就转化为了“谜一样的牛”这一道题目,时间复杂度\(O(nlogn)\)然后......