首页 > 其他分享 >CF258D Little Elephant and Broken Sorting 题解

CF258D Little Elephant and Broken Sorting 题解

时间:2023-08-25 14:37:34浏览次数:48  
标签:std CF258D Sorting 题解 valueType typedef right dfrac left

题意

给定一个长度为 \(n\) 的排列 \(a\) 和 \(m\) 个形如 \(\left(x,y\right)\) 的操作,每次操作有 \(50\%\) 的概率交换 \(a_x, a_y\),求最终排列的期望逆序对数。

(\(1 \le n,m \le 5000\))。

题解

首先转化答案

\[\text{Ans} = \sum\limits_{i = 1}^{n} \sum\limits_{j = i + 1}^{n} \operatorname{P}\left(a_i > a_j\right) \]

考虑设 \(f_{i, j} = \sum\limits_{i = 1}^{n} \sum\limits_{j = i + 1}^{n} \operatorname{P}\left(a_i > a_j\right)\)。初始值很显然

\[f_{i, j} = \left[a_i > a_j\right] \]

考虑交换操作 \(\left(x, y\right)\) 对该数组值的影响,设 \(g\) 为原数组,对于 \(\forall t \neq x \land t \neq y\),有

\[\begin{aligned} f_{t, x} &= \dfrac{1}{2} g_{t, x} + \dfrac{1}{2} g_{t, y} \\ f_{t, y} &= \dfrac{1}{2} g_{t, x} + \dfrac{1}{2} g_{t, y} \\ f_{x, t} &= \dfrac{1}{2} g_{x, t} + \dfrac{1}{2} g_{y, t} \\ f_{y, t} &= \dfrac{1}{2} g_{x, t} + \dfrac{1}{2} g_{y, t} \\ \end{aligned}\]

因为原数组为排列,即元素互不相同,那么对于 \(x, y\),有

\[\begin{aligned} f_{x, y} &= 0.5 \\ f_{y, x} &= 0.5 \\ \end{aligned}\]

每次操作 \(\mathcal{O}(n)\) 维护即可,总复杂度 \(\mathcal{O}(n^2 + nm)\),可以通过本题。

Code

#include <bits/stdc++.h>

typedef int valueType;
typedef std::vector<valueType> ValueVector;
typedef double realType;
typedef std::vector<realType> realVector;
typedef std::vector<realVector> realMatrix;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    valueType N, M;

    std::cin >> N >> M;

    ValueVector source(N + 1);
    realMatrix F(N + 1, realVector(N + 1, 0));

    for (valueType i = 1; i <= N; ++i)
        std::cin >> source[i];

    for (valueType i = 1; i <= N; ++i) {
        for (valueType j = i + 1; j <= N; ++j) {
            if (source[i] > source[j]) {
                F[i][j] = 1.0;
            } else {
                F[j][i] = 1.0;
            }
        }
    }

    for (valueType t = 0; t < M; ++t) {
        valueType a, b;

        std::cin >> a >> b;

        for (valueType i = 1; i <= N; ++i) {
            if (i == a || i == b)
                continue;

            F[i][a] = F[i][b] = (F[i][a] + F[i][b]) / 2;
            F[a][i] = F[b][i] = (F[a][i] + F[b][i]) / 2;
        }

        F[a][b] = F[b][a] = 0.5;
    }

    realType ans = 0;

    for (valueType i = 1; i <= N; ++i) {
        for (valueType j = i + 1; j <= N; ++j) {
            ans += F[i][j];
        }
    }

    std::cout << std::fixed << std::setprecision(10) << ans << std::endl;

    return 0;
}

标签:std,CF258D,Sorting,题解,valueType,typedef,right,dfrac,left
From: https://www.cnblogs.com/User-Unauthorized/p/solution-CF258D.html

相关文章

  • ADRABR - Adrita and Her Bike Ride 题解
    1.题目大意题目传送门2.思路因为每条道路长均为\(1km\),所以我们可以在建边时就加上走这条路的初始成本,即对于每条边的两端\(a,b\)和通行费\(w\),我们直接\(add(a,b,w+12)\)即可。再就是由于是多组数据,所以我们在每次输入前要清空数组,然后跑一遍最短路模板即可。3.代码#......
  • java.lang.NoClassDefFoundError问题解决方案
    骑士李四记录:场景在pom.xml中引入一个包,之后启动部署项目,出现java.lang.NoClassDefFoundError的问题。报错信息:解决方案:加入这段代码<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executi......
  • 国标视频平台EasyGBS视频能力平台Linux版内核启动报错端口占用的问题解决方案
    EasyGBS国标视频云服务是基于国标GB/T28181协议的视频能力平台,可实现的视频功能包括:实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等......
  • centos8无法安装问题解决
    1、centos使用yum或者dnf命令安装都失败,且连接互联网正常,如下图所示:2、可查看/var/log/dnf.log日志3、备份yum源,重新下载华为centos8版本软件仓库mv/etc/yum.repos.d/Centos*bak/curl-o/etc/yum.repos.d/CentOS-Base.repohttps://repo.huaweicloud.com/repository/conf/......
  • [AGC007D] Shik and Game 题解
    一道有意思的\(\text{dp}\)呀。思路我们容易发现,一个点最多会往回走一次。也就是每一个点最多被遍历三次。因此,我们可以考虑每个点的贡献。\[dp_i=\min_{j=1}^{i-1}dp_j+x_i-x_j+\max(2\times(x_i-x_{j+1}),T)\]其中,\(dp_i\)表示前\(i\)个金币全部取完,此时位于第\(i\)......
  • 『题解』JOISC2022B 京都観光 (Sightseeing in Kyoto)
    AtCoder题目链接Luogu题目链接观察题目,不自觉地想到了dp,但是再一看\(\text{1e5}\)数据范围,意识到大概是\(2^{\text{1e5}}\)的复杂度,绝望了……然后就很自然地想到了最优策略。(思路很巧妙但是我当时没想到。)考虑有三行(或三列),分别记为\(i,j,k\),如果\(j>i\landj>......
  • 求和 题解
    求和题目大意给定\(n,p\),求:\[\left(\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^{i+j}\right)\bmodp\]多组数据。思路分析老规矩,先化式子:\[\begin{aligned}\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^{i+j}&=\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^nd^{\,i+j}\,[\gcd(i,j)=d]\......
  • Arithmetic Progression 题解
    ArithmeticProgression题目大意存在一个打乱了顺序的等差数列\(a\),你可以询问不超过\(60\)次,每次可以以以下两种方式之一进行询问:查询\(a\)中是否有严格大于\(x\)的数。查询\(a_i\)的值。你需要求出这个等差数列的首项和公差。思路分析比较有意思的题。看......
  • CF1850E Cardboard for Pictures 题解
    前言一个月前的一场悲剧qwq传送门没事干写的qwq热乎着的一道题,昨晚上刚考完,然而这是一场悲剧。。。。题解题目大意给定\(a_1~a_n\)和\(c\),求\((a_1+2\timesw)^2+(a_2+2\timesw)^2+...+(a_n+2\timesw)^2=c\)时\(w\)的最小值解析我们来化简一下这个式子:\((a_......
  • NOIP 2023 周赛 3 题解
    A-Permutationsummarization构造一个\(1\dotsn\)的排列使\(\prod\limits_{i=1}^n\operatorname{lcm}(p_i,p_{(i\bmodn)+1})\)最大。solution不难发现上式最大为\(\prod\limits_{i=1}^ni^2\),即让所有\(\operatorname{lcm}(x,y)=x\timesy\),那么只要使相邻两个数互质......