题面

$ solution: $

这道题主要难在考场上能否想到这个思路(即如何设置状态)(像我这样的蒟蒻就想不到呀QAQ)不过这一题确实很神奇!

$ f[i][j]: $ 表示第 $ a_i $ 个数比第 $ a_j $ 个数大的几率,这样设置状态比较好转移:对于每一次 $ a_i $ 与 $ a_j $ 的交换,他只会影响到序列里,每一个数与 $ a_i $ , $ a_j $ 的胜率(一共有 $ n $ 次交换,只要每次交换复杂度在 $ O(n) $ 级别这道题就解决了了)。而且我们不难发现转移时每一个数与 $ a_i $ , $ a_j $ 胜率的修改是 $ O(1) $ 的:

  1. $ f[i][j]=(f[i][j]+f[j][i])\times 0.5 $
  2. $ f[j][i]=(f[i][j]+f[j][i])\times 0.5 $

所以把数列中每一位修改后复杂度刚好为 $ O(n) $ 级别,满足要求!

$ code: $

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set> #define ll long long
#define db double
#define inf 0x7fffffff
#define rg register int using namespace std; int n,m;
int a[1001];
db ans,f[1001][1001]; inline int qr(){
char ch;
while((ch=getchar())<'0'||ch>'9');
int res=ch^48;
while((ch=getchar())>='0'&&ch<='9')
res=res*10+(ch^48);
return res;
} int main(){
//freopen("inversion.in","r",stdin);
//freopen("inversion.out","w",stdout);
n=qr(),m=qr();
for(rg i=1;i<=n;++i)a[i]=qr();
for(rg i=1;i<=n;++i)
for(rg j=i+1;j<=n;++j){
if(a[i]>a[j])f[i][j]=1;
if(a[j]>a[i])f[j][i]=1;
}
for(rg k=1,i,j;k<=m;++k){
i=qr(),j=qr();
for(rg k=1;k<=n;++k){
if(i!=k&&j!=k){
f[k][i]=f[k][j]=(f[k][i]+f[k][j])*0.5;
f[i][k]=f[j][k]=(f[j][k]+f[i][k])*0.5;
}
}f[i][j]=f[j][i]=(f[i][j]+f[j][i])*0.5;
}
for(rg i=1;i<=n;++i)
for(rg j=i+1;j<=n;++j)
ans+=f[i][j];
printf("%.8lf",ans);
return 0;
}

CF258D Little Elephant and Broken Sorting (带技巧的DP)的更多相关文章

  1. CF258D Little Elephant and Broken Sorting/AGC030D Inversion Sum 期望、DP

    传送门--Codeforces 传送门--Atcoder 考虑逆序对的产生条件,是存在两个数\(i,j\)满足\(i < j,a_i > a_j\) 故设\(dp_{i,j}\)表示\(a ...

  2. CodeForces 258D Little Elephant and Broken Sorting(期望)

    CF258D Little Elephant and Broken Sorting 题意 题意翻译 有一个\(1\sim n\)的排列,会进行\(m\)次操作,操作为交换\(a,b\).每次操作都有\ ...

  3. Codeforces 258D Little Elephant and Broken Sorting (看题解) 概率dp

    Little Elephant and Broken Sorting 怎么感觉这个状态好难想到啊.. dp[ i ][ j ]表示第 i 个数字比第 j 个数字大的概率.转移好像比较显然. #incl ...

  4. CF 258 D. Little Elephant and Broken Sorting

    D. Little Elephant and Broken Sorting 链接 题意: 长度为n的序列,m次操作,每次交换两个位置,每次操作的概率为$\frac{1}{2}$,求m此操作后逆序对的期 ...

  5. 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 ...

  6. CodeForces - 258D:Little Elephant and Broken Sorting(概率DP)

    题意:长度为n的排列,m次交换xi, yi,每个交换x,y有50%的概率不发生,问逆序数的期望  .n, m <= 1000 思路:我们只用维护大小关系,dp[i][j]表示位置i的数比位置j的 ...

  7. [ZJOI2012]波浪弱化版(带技巧的DP)

    题面 \(solution:\) 这道确实挺难的,情况特别多,而且考场上都没想到如何设置状态.感觉怎么设状态不能很好的表示当前情况并转移,考后发现是对全排列的构造方式不熟而导致的,而这一题的状态也是根 ...

  8. CF293B 方格(带技巧的搜索)

    solution: 首先我们根据一条路径上不能有两个相同颜色的格子可以得出: 对于两个格子 \((x_1 , y_1 )\) 和 \((x_2 , y_2 )\) 必须满足: \(x_1<x_2 ...

  9. HDU 6351 (带技巧的暴力)

    题意:给定一个数,和一个最多交换次数k,问在不超过k次操作的情况,问可以得到的最大值和最小值是多少? 个人解题的艰辛路程 , 开始是想到了暴力枚举的可能 , 打出来发现在判断枚举的数组与原来数组交换了 ...

随机推荐

  1. EOS开发基础之六:使用cleos命令行客户端操作EOS——智能合约之eosio.msig和eosio.system

    上一节我们搞了老半天,也没整明白Exchange这个合约到底干啥用的.就它官方提供的说法,是用于货币的创造和交易.我没整明白,所以去看了下代码,发现代码头文件里面有下面这段话: This contra ...

  2. PAT甲题题解-1051. Pop Sequence (25)-堆栈

    将1~n压入最多为m元素的栈 给出k个出栈序列,问你是否能够实现. 能输出YES 否则NO 模拟一遍即可,水题. #include <iostream> #include <cstd ...

  3. C语言版本:循环单链表的实现

    SClist.h #ifndef __SCLIST_H__ #define __SCLIST_H__ #include<cstdio> #include<malloc.h> # ...

  4. 第三个Sprint ------第一天

    Github账户: 账户名称:kangqu Github地址: https://github.com/kangqu/country.git Github网站全英文,表示鸭梨山大...

  5. ajax异步导致js方法顺序执行不了

    js两个方法调用的顺序,有时候是这样的 f1(); f2(); 本来是先执行f1的,但是如果f1里面进行ajax异步    async:true,那么可能会先执行f2,如果想要顺序执行,那么就把异步设 ...

  6. Photo Cleaner -- proposed by Wei Zhang

    Need想必大家都有用手机或相机记录生活的习惯吧!在旅途中,驴友们见到美丽的风景,往往激动地咔嚓一下拍张照记录下来.完事后发现角度不太好,于是又咔嚓一下……不知不觉中一下照了好多,然而真正需要的只是那 ...

  7. Alpha 冲刺三

    团队成员 051601135 岳冠宇 051604103 陈思孝 031602629 刘意晗 031602248 郑智文 031602234 王淇 会议照片 项目燃尽图 项目进展 发布界面布局完成.登 ...

  8. Android GridView数据绑定

    java代码构造个泛型数组用于存放item,作为title        List<Map<String, Object>> items = new ArrayList< ...

  9. 查看是否存在tomcat进程和关闭方法

    #看是否已经有tomcat在运行了 ps -ef |grep tomcat #如果有,用kill; kill - pid #pid 为相应的进程号 例如 ps -ef |grep tomcat 输出如 ...

  10. 小菜菜mysql练习解读分析2——查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )

    “查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )” ——翻译为:课程表里面,存在01的信息,未必满足有02的课程情况 ...