首页 > 其他分享 >P10668 BZOJ2720 [Violet 5] 列队春游

P10668 BZOJ2720 [Violet 5] 列队春游

时间:2024-07-05 16:58:00浏览次数:19  
标签:BZOJ2720 std pre int long P10668 Violet 贡献 define

P10668 BZOJ2720 [Violet 5] 列队春游

期望

考虑每个元素什么情况下会产生贡献,然后分别贡献到答案中。当当前枚举的数 \(h_i\) 在 \(i\) 与 \(pre_i\) 之间有一个数字时那么会有对当前方案会有 \(1\) 的贡献。不妨将严格小于 \(h_i\) 的数的数量记为 \(s_i\),则大于等于 \(h_i\) 的数有 \(n-s_i\)。

计算每个方案 \(h_i\) 产生的贡献。先看 \(i\) 与 \(pre_i\) 之间的数产生给 \(h_i\) 的贡献,将大于等于 \(h_i\) 的数随机排列有 \((n-s_i)!\) 种。然后任意取一个小于 \(h_i\) 的数放到 \(i\) 和 \(pre_i\) 之间都会产生同样的贡献 \(1\),有 \(s_i\) 种取法,剩下的数插进去随便排列,有 \(A_{n}^{s_i-1}\) 种,根据乘法原理,\(i\) 与 \(pre_i\) 之间的数会产生贡献 \((n-s_i)!s_iA_{n}^{s_i-1}\),由于求的是期望,所以除以一个 \(n!\):

\[\frac{(n-s_i)!s_iA_{n}^{s_i-1}+n!}{n!}=\frac{(n-s_i)!s_iA_{n}^{s_i-1}}{n!}+1 \]

加 \(n!\) 的原因是不论有没有数对每个排列 \(h_i\) 与 \(pre_i\) 都至少有 \(1\) 的贡献。再整理化简得到:

\[\frac{n+1}{n-s_i+1} \]

这是其中一个 \(h_i\) 的贡献,答案对于每个数都求一次累加即可。

就是从求一个方案的所有位置的贡献,到枚举每个 \(h_i\) 求贡献,到枚举 \(i\) 和 \(pre_i\) 之间的其中一个数累加贡献。

复杂度 \(O(n)\)。

#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define mk std::make_pair
#define fi first
#define se second
#define pb push_back

using i64 = long long;
using ull = unsigned long long;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const int N = 1010;
int n;
int cnt[N];
double ans;
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
	std::cin >> n;
	int mx = 0;
	for (int i = 1; i <= n; i++) {
		int a;
		std::cin >> a;
		cnt[a]++;
		mx = std::max(mx, a);
	}

	int sum = 0;
	for (int i = 1; i <= mx; i++) {
		if(!cnt[i]) continue;
		ans += 1.0 * (n + 1) / (n - sum + 1) * cnt[i];
		sum += cnt[i];
	}
	std::cout << std::fixed << std::setprecision(2) << ans << "\n";

	return 0;
}

标签:BZOJ2720,std,pre,int,long,P10668,Violet,贡献,define
From: https://www.cnblogs.com/FireRaku/p/18286160

相关文章

  • ## 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\)的学生,只有身高为\(......
  • [BZOJ2720 Violet 5]列队春游(概率期望+组合数学)
    列队春游问题描述输入格式:输出格式:样例输入:3123样例输出:4.33提示思路根据期望的线性性质,我们可以枚举每种可能的视野,然后求和对于每种视野,其期望为该种视野的视野长度*该种视野的概率设某个小朋友的视野期望为\(ans\),她的视野长度为\(L\)由于前面......
  • [博客迁移20190713]题解 P4169 【[Violet]天使玩偶/SJY摆棋子】
    《算法竞赛》书上例题(可惜原书没代码)天使玩偶,一道好题。(书p243)我就来谈谈自己的想法吧!而总有人在这种明明可以离线处理的三维偏序问题上投机取巧。如:KDtree。蒟蒻想说,KDtree在这题复杂度是不对的。虽有剪枝,可是还是有可能遍历整棵树的(期望复杂度不靠谱)对上述看法有争议的,请跳......
  • P4168 [Violet] 蒲公英 (莫队的强制在线)
    前言当个乐子看就行所用时间不如分块正解快虽然在线莫队实质也是分块[Violet]蒲公英题目背景亲爱的哥哥:你在那个城市里面过得好吗?我在家里面最近很开心呢。昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了。我......
  • P4168 [Violet] 蒲公英(题解)
    题目题目描述输入格式输出格式数据范围![]样例输入:63123212153615输出:121思路暴力本题求区间内的最小众数,容易想到去用数组sum[i]表示第i种花的个数,在去便利比较,但是复杂度nm一定会T,这时候就要对暴力进行优化。分块优化1如果我们将所......
  • Ybt 金牌导航 6.3.A. 区间众数 / P4168 [Violet] 蒲公英(分块)
    题意简述多次查询区间\([l,r]\)的众数,若有多个取数值最小的。强制在线。\(n\le4\times10^4,m\le5\times10^4\)。分析考虑分块。首先预处理出块区间内的众数\(maj_{l,r}\)和每种数在某个块的前缀的出现次数\(cnt_{i,a_i}\),时空复杂度都是\(O(n\sqrtn)\)的。对于询......
  • Luogu P4168 [Violet] 蒲公英 题解
    题目链接[Violet]蒲公英分析可以先将\(a[i]\)离散化然后考虑分块对于询问\(x,y\),\(x\)属于\(p\),\(y\)属于\(q\)当\(q-p<=1\)时直接暴力枚举即可,时间复杂度为\(O(\sqrt{n})\)\(else\)如图中间为分好块的地方我们发现,\(ans\)只可能为中间的众数或两边的......
  • [Violet5]樱花
    [Violet5]樱花题解题意概括:题目意思很明白,输入一个\(int\)类型整数\(n\)(\(1<=n<=10^6\))求方程\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\)(\(n!\)表示\(n\)的阶乘,即\(n!=1\times2\times3\times······\timesn\))解的个数题目分析:肯定是一个数论题(废话),题......
  • K-D Tree模板/P4169 [Violet]天使玩偶/SJY摆棋子
    \(\color{purple}\text{P4169[Violet]天使玩偶/SJY摆棋子}\)以本题为例题讲解模板怎么写。思路\(\text{K-DTree}\)是一种类二叉查找树,不过元素是多维的,所以每次对于子树的划分也是依据不同维度的。本题使用二维的\(\text{K-DTree}\),这样每次将图分成左右子树其实就是将......
  • [Violet 5]列队春游
    DescriptionlinkSolution考虑对于每一个人算贡献。令\(P(i)\)表示这个人视野距离为\(i\)的概率,\(Q(i)\)表示视野距离不小于\(i\)的概率,令\(k\)表示能够阻拦......