首页 > 其他分享 >[AGC030D] Inversion Sum 题解

[AGC030D] Inversion Sum 题解

时间:2023-08-25 16:34:26浏览次数:54  
标签:std Inversion right 题解 Sum typedef dfrac valueType left

题意

给定一个长度为 \(n\) 的排列 \(a\) 和 \(m\) 个形如 \(\left(x,y\right)\) 的操作,每次操作可以选择是否交换 \(a_x, a_y\),求最终所有形成的排列的逆序对总数。

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

题解

考虑转化题意,考虑求出最终总的期望逆序对数,即 CF258D

转化答案

\[\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}\]

所有操作处理完成后直接乘上所有可能的排列数即 \(2^m\) 即可得到本题答案。

每次操作 \(\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,Inversion,right,题解,Sum,typedef,dfrac,valueType,left
From: https://www.cnblogs.com/User-Unauthorized/p/solution-AGC030D.html

相关文章

  • Codeforces Round 894 (Div. 3) A-F题解
    A.GiftCarpet题意最近,特马和维卡庆祝了家庭日。他们的朋友Arina送给他们一块地毯,这块地毯可以用拉丁文小写字母的\(n\cdotm\)表来表示。维卡还没看过礼物,但特马知道她喜欢什么样的地毯。如果维卡能在地毯上读出自己的名字,她一定会喜欢的。她从左到右逐列阅读,并从当前列中......
  • arc142,arc143,arc144题解
    ARC142A-EAReverseandMinimize憨的。BUnbalancedSquares构造。考虑一行之内大小交错,行间则单调排列。这样可以使得每个点上下大小关系抵消,左右的又保持一样,于是就合法了。CTreeQueries处在\(1,2\)最短路径上的点一定到两个点距离和最小,于是找到这个距离。但是这个......
  • 网络规划设计师真题解析--IP地址类(一)
    将地址块192.168.0.0/24按照可变长子网掩码的思想进行子网划分,若各部门可用主机地址需求如下表所示,则共有(27)种划分方案,部门3的掩码长度为(28)。(2018年)(27)A.4B.8C.16D.32(28)A.25B.26C.27D.28部门所需地址总数部门1100部门250部门316部门410部门58答案:(27)C(28)C解析:(27)部门所......
  • RTSP流媒体服务器EasyNVR视频平台设备通道时间与服务器录像时间不一致的问题解决步骤
    EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议,将前端接入设备的音视频资源进行采集,并转码成适合全平台、全终端分发的视频流格式,包括RTMP、RTSP、FLV、HLS、WebRTC等格式。平台已经在智慧水利、智慧工厂、智慧校园、智慧仓储等场景中应用。​ 有用户反馈,设......
  • CF258D Little Elephant and Broken Sorting 题解
    题意给定一个长度为\(n\)的排列\(a\)和\(m\)个形如\(\left(x,y\right)\)的操作,每次操作有\(50\%\)的概率交换\(a_x,a_y\),求最终排列的期望逆序对数。(\(1\len,m\le5000\))。题解首先转化答案\[\text{Ans}=\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^{......
  • 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等......
  • Commit failed (details follow): Working copy text base is corrupt Checksum misma
    问题:提交一个svn文件报错,提交其他文件没有报错解决办法:(网上看了很多方法都解决不了):1、把文件拷贝到svn目录外放着2、把svn目录下文件移除,然后commitsvn3、把目录外的文件拷贝进来,先Add,然后commit就成功了......
  • 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/......