Inversions After Shuffle CodeForces - 749E (概率,期望)

大意: 给定一个$n$排列, 随机选一个区间, 求将区间随机重排后整个序列的逆序对期望.

考虑对区间$[l,r]$重排后逆序对的变化, 显然只有区间[l,r]内部会发生改变

而长为$k$的随机排列期望逆序为$\frac{k(k-1)}{4}$(证明考虑逆序与顺序对称性)

所以$[l,r]$的贡献即为$inv(1,n)-inv(l,r)+\frac{(r-l+1)(r-l)}{4}$

所以就转化为求$\sum\limits_{1\le l\le r\le n}inv(l,r)$

对于逆序对$(x,y)$, 我们枚举$y$, 就有贡献$(n-y+1)\sum\limits_{\substack{1\le x< y\\ a_y<a_x}}x$

就转化为二维数点问题, 可以用树状数组解决.

用$long\space double$不知道为什么会WA, 改成$double$直接过了

#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <string.h>
#include <bitset>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl ‘\n‘
#define DB(a) ({REP(__i,1,n) cout<<a[__i]<<‘ ‘;hr;})
using namespace std;
typedef long long ll;
typedef double db;

const int N = 1e5+10;
int n;
db c[2][N];
void add(int id, int x, int v) {
	for (; x; x^=x&-x) c[id][x]+=v;
}
db qry(int id, int x) {
	db ret = 0;
	for (; x<=n; x+=x&-x) ret+=c[id][x];
	return ret;
}
int main() {
	scanf("%d", &n);
	db ans = 0;
	REP(i,1,n) {
		int t;
		scanf("%d", &t);
		ans += qry(0,t)*n*(n+1)/2-(n-i+1)*qry(1,t)+((db)i*i*i-i)/12;
		add(0,t,1), add(1,t,i);
	}
	ans /= (db)n*(n+1)/2;
	printf("%.12lf\n", ans);
}

原文地址:https://www.cnblogs.com/uid001/p/10804441.html

时间: 2024-08-07 22:58:23

Inversions After Shuffle CodeForces - 749E (概率,期望)的相关文章

2017-03-16 Codeforces 453A 概率期望,思维 UOJ 228(待补)

Codeforces 453A   A. Little Pony and Expected Maximum 题意:一个m面质地均匀的骰子,每面出现的概率都是独立的1/m, 你需要投掷n次,其结果是这n次出现的最大点数.问投掷n次骰子的结果的期望值是多少,要求相对误差或绝对误差不超过1e-4. tags:枚举骰子出现最大值i,计算出最大值为i时的概率,就得到了答案. 最大值为i的概率=(i/m)^n-((i-1)/m)^n. #include<bits/stdc++.h> using names

【codeforces 749E】 Inversions After Shuffle

http://codeforces.com/problemset/problem/749/E (题目链接) 题意 给出一个1~n的排列,从中等概率的选取一个连续段,设其长度为l.对连续段重新进行等概率的全排列,求排列后整个原序列的逆序对的期望个数. Solution 考虑对于每一对数${(a_i,a_j),i<j}$算贡献. 1.连续段包含${a_i,a_j}$ 不妨设${a_i<a_j}$,则只有当排列后${a_j}$再${a_i}$前面才会对答案有贡献(${a_i>a_j}$的情况同

CF749E Inversions After Shuffle 解题报告 (期望 树状数组)

E. Inversions After Shuffle 题意 有一个长 \(n\) 的排列, 随机选取一段区间进行随机全排列, 求排列后整个序列的逆序对期望个数. \((n \le 10^5)\). 思路 首先, 考虑一整个排列进行排序后的逆序对期望个数, 一共有 \(\frac{n(n-1)}{2}\) 对点, 每对点行程逆序对的概率为 \(\frac{1}{2}\) , 所以逆序对期望个数为 \(\frac{n(n-1)}{4}\). 那么, 我们就可以算出每个区间对答案的贡献, 长度为 \

Codeforces - 1264C - Beautiful Mirrors with queries - 概率期望dp

一道挺难的概率期望dp,花了很长时间才学会div2的E怎么做,但这道题是另一种设法. https://codeforces.com/contest/1264/problem/C 要设为 \(dp_i\) 表示第 \(i\) 个格子期望经过多少次,所以 \(dp_{n+1}=1\). https://www.cnblogs.com/suncongbo/p/11996219.html 原文地址:https://www.cnblogs.com/KisekiPurin2019/p/12063633.ht

hdu 4586 (概率+期望)

http://acm.hdu.edu.cn/showproblem.php?pid=4586 大致题意:有一个骰子有n个面,掷到每一个面的概率是相等的,每一个面上都有相应的钱数.其中当你掷到m个面之一时,你有多掷一次的机会.问最后所得钱数的期望. 思路:设投掷第一次的期望是p,那么第二次的期望是m/n*p,第三次的期望是 (m/n)^2*p......第N次的期望是(m/n)^(N-1)*p. 那么这些期望之和便是答案.之前也是想到这,但不知道如何处理无限的情况.当时脑卡了,这不是赤裸裸的等比数

OI队内测试一【数论概率期望】

版权声明:未经本人允许,擅自转载,一旦发现将严肃处理,情节严重者,将追究法律责任! 测试分数:110 本应分数:160 改完分数:200 T1: 题解:推出了一个初始式子但是n的4分之3次方 忘了合并[实际上是没发现]本来应有60分的,但是忘记开long long 只有30分 因为一些公式不好写出来就直接截图题解吧! T2: 题解:很简单的概率期望,算出每个点被选的概率,然后在上树状数组或者线段树求逆序队,但是我只有80分,为什么解法不行?NO NO 你还是太年轻我只是线段树数据范围开小了!![

uvalive 7331 Hovering Hornet 半平面交+概率期望

题意:一个骰子在一个人正方形内,蜜蜂在任意一个位置可以出现,问看到点数的期望. 思路:半平面交+概率期望 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 #include<cstdlib> 6 #include<string> 7 #include<cmath> 8 #include<vector&

【BZOJ-1419】Red is good 概率期望DP

1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Discuss] Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻牌,在最优策略下平均能得到多少钱. Input 一行输入两个数R,B,其值在0到5000之间 Output 在最优策略下平均能得到多少钱

Lightoj 1027 概率期望

Problem: 概率期望 Analyse: 非常经典的带有递归实现,的方程期望式子. E为期望,z为正数个数,zp为正数平均值,f为负数个数,fp为负数平均值. z?zpn+f?fp+En=E /**********************jibancanyang************************** *Author* :jibancanyang *Created Time* : 五 5/ 6 23:58:46 2016 *File Name* : .cpp **Code**: