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;
}
转载于:https://www.cnblogs.com/coder-Uranus/p/9899145.html
CodeForces 258D Little Elephant and Broken Sorting(期望)相关推荐
- Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 E - Sorting Books 一排书架上有 nnn 本书排成一排,每本书上有一个颜色 aia_i ...
- 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 ...
- 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 ...
- Codeforces - 65D - Harry Potter and the Sorting Hat - 简单搜索
https://codeforces.com/problemset/problem/65/D 哈利波特!一种新思路的状压记忆化dfs,记得每次dfs用完要减回去.而且一定是要在dfs外部进行加减!防止 ...
- *【CodeForces - 280C】Game on Tree(期望模型,期望的线性性)
题干: Momiji has got a rooted tree, consisting of n nodes. The tree nodes are numbered by integers fro ...
- CodeForces 258B Little Elephant and Elections 数位DP
前面先用数位DP预处理,然后暴力计算组合方式即可. #include <cstdio> #include <cstring> #include <cmath> #i ...
- Codeforces 258B Little Elephant and Elections
题意:有7个人从m个数中任选一个不重复的,其中4和7是幸运数,一个人的幸运值等于他所选的数字中所有'4'的个数+'7'的个数.求一个人的幸运值比其他6人幸运值总和大的方案数. 1 #include & ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- OI每周刷题记录——lrllrl
看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...
最新文章
- 扫描服务器端口信息工具,服务器端口扫描工具
- EnterpriseDB Migration 迁移工具使用测试(2)
- 在一个gradle 的maven property 里添加多个URL
- python wxpython backend wxagg_[宜配屋]听图阁
- Greenplum roaring bitmap与业务场景 (类阿里云RDS PG varbitx, 应用于海量用户 实时画像和圈选、透视)
- MYSQL为什么long_query_time设置了1秒,slow log中记录了小于1秒的慢查询
- 沉痛哀悼在汶川特大地震中的遇难者!!!!!
- java之struts2的action的创建方式
- Python爬取你好李焕英豆瓣短评并利用stylecloud制作更酷炫的词云图
- ASP.NET生成分页静态页
- 苹果Mac环境如何配置定时任务?
- 2.2 PHP7.2 狐教程-【PHP变量】
- Pygame实现”走四棋儿“双人对战小游戏
- sprintf函数用法注意事项
- 【Java程序员面试】直接被SpringBoot干趴?NONONO!拒绝做冤大头!!
- 在word中一个符号怎么打,这个符号是上边一个白三角,下边一个黑三角,两个三角对称形成一个向右的箭头。
- 64位系统装32位计算机,64位电脑装32位系统,教您64位电脑怎么装32位系统
- SSH Remote forwarding的示例
- m73p黑苹果_M93P一次性拔草小主机,黑苹果,软路由。
- 我的世界服务器显示弹幕,[娱乐]RaiixDM —— 在mc中接收b站直播弹幕[1.12.x-1.15.x]...
热门文章
- 8.Excel数据与指标概述
- mysql mode_mysql中的sql_mode
- PAT_B_1012_Java(20分)
- matlab相机标定_【显微视界】基于视觉伺服的工业机器人系统研究(摄像机标定、手眼标定、目标单目定位)...
- js 实现 table 行上移 (数据库)
- Python+Opencv实现多种形状的检测
- C语言中如何使用宏连接多个字符串(#和##的用法)
- 关于车机互联方式的一点想法
- ashx和asmx的HttpContext
- 使用Xcap发送网络数据包