逆序对 inversion
【问题描述】
有一个1 − n的排列,你会依次进行m次操作,第i次操作表示为(x i , y i ),交换以这两个
值为下标的元素,每次操作有一半的概率成功,你需要求出最后序列的逆序对的期望个数。
【输入】
输入文件 inversion.in。
第一行两个数n, m。
第二行n个数表示初始的排列。
接下来m行,每行两个数表示x i , y i 。
【输出】
输出文件 inversion.out。
一个实数表示答案,四舍五入保留到小数点后 8 位,要求绝对误差不超过 10 -6 。
(评测时开启实数比较模式)【样例输入】
4 3
1 3 2 4
1 2
2 3
1 4
【样例输出】
3.00000000
【数据说明】
30%: n ≤ 10, m ≤ 20
100%: n ≤ 1000, m ≤ 1000
gql的方法:
把逆序对的期望数分开来算
f[i][j] 表示编号为 i 的数大于编号为 j 的数的概率
维护这个数组
统计答案的时候就直接吧所有 i<j 时的 f[i][j] 相加即可
怎么维护这个数组呢
首先输入完n个数后 可以初始化得出最初的 f[ ][ ]
然后边输入 xi yi 边更新 f[ ][ ] 具体见代码啦
#include<iostream>
#include<cstdio>
#define go(i,a,b) for(register int i=a;i<=b;i++)
#define db double
using namespace std;
int read()
{
int x=,y=;char c=getchar();
while(c<''||c>'') {if(c=='-') y=-;c=getchar();}
while(c>=''&&c<='') {x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
int n,m,x,y,a[];
db f[][],ans;
int main()
{
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
n=read();m=read();
go(i,,n) a[i]=read();
go(i,,n) go(j,,n) if(a[i]>a[j]) f[i][j]=;
go(i,,m)
{
x=read();y=read();
go(j,,n)
{
f[x][j]=f[y][j]=(f[x][j]+f[y][j])*0.5;
f[j][x]=f[j][y]=-f[x][j];
}
f[x][y]=f[y][x]=0.5;
}
go(i,,n) go(j,i+,n) ans+=f[i][j];
printf("%.8lf",ans);
return ;
}
逆序对 inversion的更多相关文章
- HDU 1394Minimum Inversion Number 数状数组 逆序对数量和
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- HDU-1394 Minimum Inversion Number 线段树+逆序对
仍旧在练习线段树中..这道题一开始没有完全理解搞了一上午,感到了自己的shabi.. Minimum Inversion Number Time Limit: 2000/1000 MS (Java/O ...
- UVA 11990 ``Dynamic'' Inversion 动态逆序对
``Dynamic'' Inversion Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/index ...
- hdu 5497 Inversion 树状数组 逆序对,单点修改
Inversion Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5497 ...
- 浙江工商大学15年校赛I题 Inversion 【归并排序求逆序对】
Inversion Time Limit 1s Memory Limit 131072KB Judge Program Standard Ratio(Solve/Submit) 15.00%(3/20 ...
- HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)
HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...
- 逆序对(inversion)
逆序对(inversion) 题目描述 对于序列AA,它的逆序对数定义为满足i<ji<j,且Ai>AjAi>Aj 的数对i,ji,j的个数. 现给你11到nn的一个排列,并按照 ...
- SPOJ:Another Version of Inversion(二维数组的逆序对)
DCE Coders admins are way much geekier than they actually seem! Kartik has been following that tradi ...
- 线段树 逆序对 Minimum Inversion Number HDU - 1394 Laptop
Minimum Inversion Number HDU - 1394 求最小反转数,就是求最少的逆序对. 逆序对怎么求,就是先把所有的数都初始化为0,然后按照顺序放入数字,放入数字前查询从这个数往后 ...
随机推荐
- EasyUseCase 一款脑图转化 Excel 测试用例工具 (1.2 版本升级)
EasyUseCase 本工具由本人自主开发.经过内部实践有效提升测试用例编写效率200% 覆盖率可度量.利用读取xmind软件图表转换符合国人基本需求的测试用例,让手动写Excel用例的日子过去,发 ...
- 用python和unittest编写app自动化测试用例
import unittest import webdriver import time class Test(unittest.TestCase): @classmethod def setUpCl ...
- 【Python】Python基础
源程序文件通常以.py为扩展名 #!/usr/bin/python shebang,即执行脚本时通知内容要启动的解释器 import platform 导入模块 print platform.unam ...
- There is no getter for property named 'notice' in 'class com.game.domain.Notices'
在插入数据时报错:There is no getter for property named 'notice' in 'class com.game.domain.Notices' 四月 11, 20 ...
- QPainter 基础绘图
调用QPainter的接口来绘制一些基本的图形 头文件: #include <QMainWindow> #include <QPainter> namespace Ui { c ...
- 概率图模型(PGM)综述-by MIT 林达华博士
声明:本文转载自http://www.sigvc.org/bbs/thread-728-1-1.html,个人感觉是很好的PGM理论综述,高屋建瓴的总结了PGM的主要分支和发展趋势,特收藏于此. “概 ...
- python参数传递方式
原文地址:http://www.cnblogs.com/zhaopengcheng/p/5492183.html python中一切皆对象,函数中参数传递的是对象的引用. 1在函数中改变变量指向的对象 ...
- Day22-Django之Form组件验证
1. Django里面的Form专门用来做验证. 用Form创建一个类,把用户发来的数据放到request.POST里面发给这个类,这个类会帮忙做验证. 返回3个结果:是否验证成功了,所有的正确信息, ...
- [洛谷P5081]Tweetuzki 爱取球
题目大意:有$n$个球,每一次取一个球然后放回,问期望多少次取遍所有球 题解:令$f_i$表示已经取了$i$种球,还要取的次数的期望.$f_i=\dfrac in(f_i+1)+\dfrac{n-i} ...
- CentOS7单节点部署redis主从复制和sentinel
准备一台机器,系统版本为CentOS7. 部署redis 1.下载软件包 # wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解 ...