CodeForces 258D Little Elephant and Broken Sorting(期望)
CF258D Little Elephant and Broken Sorting
题意
题意翻译
有一个\(1\sim n\)的排列,会进行\(m\)次操作,操作为交换\(a,b\)。每次操作都有\(50\%\)的概率进行。
求进行\(m\)次操作以后的期望逆序对个数。
\(n,m\le 1000\)
输入输出格式
输入格式:
The first line contains two integers \(n\) and \(m\) \((1\leq n,m\leq 1000,n>1)\) — the permutation size and the number of moves. The second line contains \(n\) distinct integers, not exceeding \(n\) — the initial permutation. Next \(m\) lines each contain two integers: the \(i\)-th line contains integers \(a_{i}\) and \(b_{i}\) \((1\leq a_{i},b_{i}\leq n,a_{i}\neq b_{i})\) — the positions of elements that were changed during the \(i\)-th move.
输出格式:
In the only line print a single real number — the answer to the problem. The answer will be considered correct if its relative or absolute error does not exceed \(10^{-6}\).
输入输出样例
输入样例#1:
2 1
1 2
1 2
输出样例#1:
0.500000000
输入样例#2:
4 3
1 3 2 4
1 2
2 3
1 4
输出样例#2:
3.000000000
思路
这道题真的水。 --Mercury
完全想不到的状态设计,感谢\(Mercury\)巨佬的指点。
定义\(f(i,j)\)为位置\(i\)上的数比位置\(j\)上的数大的概率。假设每次交换都是\(100\%\)成功的,不妨设这次交换的数的下标为\(a,b\),那么对于任意的\(f(i,a),f(i,b)\)就要被交换,\(f(a,i),f(b,i)\)也要被交换。可是当前交换的概率是\(50\%\)的,所以\(f(i,a),f(i,b)\)之间的差值要被分别减少\(50\%\),也就相当于\(f(i,a)=f(i,b)=(f(i,a)+f(i,b))\div 2\)。同理,\(f(a,i)=f(b,i)=(f(a,i)+f(b,i))\div 2\)。最后的逆序对期望,也就是\(\Sigma [i<j]f(i,j)\times 1\),也就是\(\Sigma [i<j]f(i,j)\)。
还要再胡扯两句。 其实只要想出了\(f(i,j)\)这个东西,什么都简单了,可是又会有几个人能够想到这种方法呢?完全没有类似的情况作为参考,掌握了这道题却又能给类似的题提供经验(毕竟也没有类似的题)。下一次见到了这种思维量大的题,还是不太能想得出。思维的活跃在\(OI\)中还是有很大的作用的啊!
AC代码
#include<bits/stdc++.h>
#define RG register
using namespace std;
int n,m,a[1005];
double ans,f[1005][1005];
int read()
{
RG int re=0;RG char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();
return re;
}
int main()
{
n=read(),m=read();
for(RG int i=1;i<=n;i++) a[i]=read();
for(RG int i=1;i<=n;i++)
for(RG int j=i+1;j<=n;j++)
if(a[i]>a[j]) f[i][j]=1.0;
else f[j][i]=1.0;
while(m--)
{
RG int x=read(),y=read();
if(x==y) continue;
for(RG int i=1;i<=n;i++)
{
if(i==x||i==y) continue;
f[i][x]=f[i][y]=(f[i][x]+f[i][y])/2;
f[x][i]=f[y][i]=(f[x][i]+f[y][i])/2;
}
f[x][y]=f[y][x]=0.5;
}
for(RG int i=1;i<=n;i++)
for(RG int j=i+1;j<=n;j++)
ans+=f[i][j];
printf("%.8f",ans);
return 0;
}
CodeForces 258D Little Elephant and Broken Sorting(期望)的更多相关文章
- Codeforces 258D Little Elephant and Broken Sorting (看题解) 概率dp
Little Elephant and Broken Sorting 怎么感觉这个状态好难想到啊.. dp[ i ][ j ]表示第 i 个数字比第 j 个数字大的概率.转移好像比较显然. #incl ...
- CodeForces - 258D Little Elephant and Broken Sorting
Discription The Little Elephant loves permutations of integers from 1 to n very much. But most of al ...
- CF 258 D. Little Elephant and Broken Sorting
D. Little Elephant and Broken Sorting 链接 题意: 长度为n的序列,m次操作,每次交换两个位置,每次操作的概率为$\frac{1}{2}$,求m此操作后逆序对的期 ...
- CodeForces - 258D:Little Elephant and Broken Sorting(概率DP)
题意:长度为n的排列,m次交换xi, yi,每个交换x,y有50%的概率不发生,问逆序数的期望 .n, m <= 1000 思路:我们只用维护大小关系,dp[i][j]表示位置i的数比位置j的 ...
- CF258D Little Elephant and Broken Sorting/AGC030D Inversion Sum 期望、DP
传送门--Codeforces 传送门--Atcoder 考虑逆序对的产生条件,是存在两个数\(i,j\)满足\(i < j,a_i > a_j\) 故设\(dp_{i,j}\)表示\(a ...
- CF258D Little Elephant and Broken Sorting (带技巧的DP)
题面 \(solution:\) 这道题主要难在考场上能否想到这个思路(即如何设置状态)(像我这样的蒟蒻就想不到呀QAQ)不过这一题确实很神奇! \(f[i][j]:\)表示第 \(a_i\) 个数比 ...
- codeforces 258D
D. Little Elephant and Broken Sorting time limit per test 2 seconds memory limit per test 256 megaby ...
- codeforces 258D DP
D. Little Elephant and Broken Sorting time limit per test 2 seconds memory limit per test 256 megaby ...
- CodeForces - 204C Little Elephant and Furik and Rubik
CodeForces - 204C Little Elephant and Furik and Rubik 个人感觉是很好的一道题 这道题乍一看我们无从下手,那我们就先想想怎么打暴力 暴力还不简单?枚 ...
随机推荐
- RN书签
Bookmarks 书签栏 门户 配置reactNative(RN)过程中 出现react-native:command not... - 简书 * React-NativeChannel - sma ...
- Excel的数据分析—排位与百分比
Excel的数据分析-排位与百分比 某班级期中考试进行后,按照要求仅公布成绩,但学生及家长要求知道排名.故欲公布成绩排名,学生可以通过成绩查询到自己的排名,并同时得到该成绩位于班级百分比排名(即该同学 ...
- Putty 两步代理访问互联网
工作在机房,有时需要访问外网. 此时浏览器需要使用代理服务器,访问的流程如下: 由于SERVER2不能直接访问互联网,而SERVER3可以(机房无法直接访问SERVER3)所以需要两步代理. 配置流程 ...
- express 创建项目
express 创建项目: 1.熟悉express命令 2.创建模板 3.安装组件
- spark1.0.2读取hbase(CDH0.96.1)上的数据
基本环境: 我是在win7环境下,spark1.0.2,HBase0.9.6.1 使用工具:IDEA14.1, scala 2.11.6, sbt.我现在是测试环境使用的是单节点 1.使用IDEA创建 ...
- Vmware Centos7 配置静态 ip 和 使宿主机和虚拟机互相 ping 通
NAT 方式1. 配置静态 ipVmware 安装 Centos7 可以参考 https://blog.csdn.net/guo_ridgepole/article/details/78973763 ...
- java-day12
数据结构 常用的数据存储结构:栈,队列,数组,列表,红黑树. 栈:先进后出(入口和出口在用一侧) 队列:先进先出 数组: 查询快:因为数组的地址是连续的,通过数组的首地址找到数组中的元素. 增/删慢: ...
- 《转》python数据类型
转自 http://www.cnblogs.com/BeginMan/archive/2013/06/08/3125876.html 一.标准类型函数 cmp():比较大小 str():转换为字符串 ...
- 11-python基础—格式化的两种方式
一.使用% %s 字符串 %c 字符 %d 十进制(整数) %i 整数 %u 无符号整数 %o 八进制整数 %x 十六进制整数 %X 十六进制整数大写 %e 浮点数格式1 %E 浮点数格式2 %f 浮 ...
- 安装go环境
~~~~~~~~~~~~~~~~~~~~~~~~~~~~go项目运行时的依赖包安装问题~~~~~~~~~~~~~~~~~~~~~~~~~~~~1.安装go环境 wget https://dl.goog ...