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;
}

转载于:https://www.cnblogs.com/coder-Uranus/p/9899145.html

CodeForces 258D Little Elephant and Broken Sorting(期望)相关推荐

  1. Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 E - Sorting Books 一排书架上有 nnn 本书排成一排,每本书上有一个颜色 aia_i ...

  2. CF--思维练习--CodeForces - 220C Little Elephant and Shifts (STL模拟)

    ACM思维题训练集合 The Little Elephant has two permutations a and b of length n, consisting of numbers from ...

  3. CF--思维练习--CodeForces - 221C-H - Little Elephant and Problem (思维)

    ACM思维题训练集合 The Little Elephant has got a problem - somebody has been touching his sorted by non-decr ...

  4. Codeforces - 65D - Harry Potter and the Sorting Hat - 简单搜索

    https://codeforces.com/problemset/problem/65/D 哈利波特!一种新思路的状压记忆化dfs,记得每次dfs用完要减回去.而且一定是要在dfs外部进行加减!防止 ...

  5. *【CodeForces - 280C】Game on Tree(期望模型,期望的线性性)

    题干: Momiji has got a rooted tree, consisting of n nodes. The tree nodes are numbered by integers fro ...

  6. CodeForces 258B Little Elephant and Elections 数位DP

    前面先用数位DP预处理,然后暴力计算组合方式即可. #include <cstdio> #include <cstring> #include <cmath> #i ...

  7. Codeforces 258B Little Elephant and Elections

    题意:有7个人从m个数中任选一个不重复的,其中4和7是幸运数,一个人的幸运值等于他所选的数字中所有'4'的个数+'7'的个数.求一个人的幸运值比其他6人幸运值总和大的方案数. 1 #include & ...

  8. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  9. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

最新文章

  1. 扫描服务器端口信息工具,服务器端口扫描工具
  2. EnterpriseDB Migration 迁移工具使用测试(2)
  3. 在一个gradle 的maven property 里添加多个URL
  4. python wxpython backend wxagg_[宜配屋]听图阁
  5. Greenplum roaring bitmap与业务场景 (类阿里云RDS PG varbitx, 应用于海量用户 实时画像和圈选、透视)
  6. MYSQL为什么long_query_time设置了1秒,slow log中记录了小于1秒的慢查询
  7. 沉痛哀悼在汶川特大地震中的遇难者!!!!!
  8. java之struts2的action的创建方式
  9. Python爬取你好李焕英豆瓣短评并利用stylecloud制作更酷炫的词云图
  10. ASP.NET生成分页静态页
  11. 苹果Mac环境如何配置定时任务?
  12. 2.2 PHP7.2 狐教程-【PHP变量】
  13. Pygame实现”走四棋儿“双人对战小游戏
  14. sprintf函数用法注意事项
  15. 【Java程序员面试】直接被SpringBoot干趴?NONONO!拒绝做冤大头!!
  16. 在word中一个符号怎么打,这个符号是上边一个白三角,下边一个黑三角,两个三角对称形成一个向右的箭头。
  17. 64位系统装32位计算机,64位电脑装32位系统,教您64位电脑怎么装32位系统
  18. SSH Remote forwarding的示例
  19. m73p黑苹果_M93P一次性拔草小主机,黑苹果,软路由。
  20. 我的世界服务器显示弹幕,[娱乐]RaiixDM —— 在mc中接收b站直播弹幕[1.12.x-1.15.x]...

热门文章

  1. 8.Excel数据与指标概述
  2. mysql mode_mysql中的sql_mode
  3. PAT_B_1012_Java(20分)
  4. matlab相机标定_【显微视界】基于视觉伺服的工业机器人系统研究(摄像机标定、手眼标定、目标单目定位)...
  5. js 实现 table 行上移 (数据库)
  6. Python+Opencv实现多种形状的检测
  7. C语言中如何使用宏连接多个字符串(#和##的用法)
  8. 关于车机互联方式的一点想法
  9. ashx和asmx的HttpContext
  10. 使用Xcap发送网络数据包