题目链接:http://codeforces.com/problemset/problem/351/B

题意:

  给你一个1到n的排列a[i]。

  Jeff和Furik轮流操作,Jeff先手。

  Jeff每次会交换a[i]>a[i+1]的两个数。

  Furik每次有1/2的概率交换a[i]<a[i+1]的两个数,有1/2的概率交换a[i]>a[i+1]的两个数。

  当这个排列变成升序时,游戏停止。

  问你操作数的期望。

题解:

  假设原序列中有t个逆序对。

  那么将这个序列变成升序,就是将这t个逆序对一个个消除。

  

  Jeff每次会减少一个逆序对。

  Furik每次有1/2概率增加一个逆序对,有1/2概率减少一个逆序对。

  加起来就是:每两次操作,有1/2概率减少两个逆序对,有1/2概率不变。

  也就是:每两次操作,一定会减少一个逆序对。

  

  然而在最后一个回合中,有可能Jeff操作完后,游戏就已经结束了,不用Furik再操作。

  当且仅当逆序对个数t为奇数时,上面的情况成立,操作数-1。

  所以最终答案为:t*2 - (t&1)

  

  另外这道题也可以递推求期望,通项公式就是上面这个,原理一样的。

  还有保留6位小数什么的,不存在的,重点是求逆序对QAQ……

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 3005
#define INF 1000000000 using namespace std; int n,t=;
int a[MAX_N];
int l[MAX_N];
int r[MAX_N]; void merge(int lef,int mid,int rig)
{
int n1=mid-lef+;
int n2=rig-mid;
for(int i=;i<n1;i++) l[i]=a[lef+i];
for(int i=;i<n2;i++) r[i]=a[mid+i+];
l[n1]=r[n2]=INF;
for(int i=,j=,k=lef;k<=rig;k++)
{
if(l[i]<=r[j]) a[k]=l[i++];
else a[k]=r[j++],t+=n1-i;
}
} void merge_sort(int lef,int rig)
{
if(lef==rig) return;
int mid=(lef+rig)>>;
merge_sort(lef,mid);
merge_sort(mid+,rig);
merge(lef,mid,rig);
} int main()
{
cin>>n;
for(int i=;i<n;i++) cin>>a[i];
merge_sort(,n-);
cout<<t*-(t&)<<".000000"<<endl;
}

最新文章

  1. IOS-frame和bounds有什么不同
  2. D3.js 理解 Update、Enter、Exit
  3. NPC AI驱动最基本过程
  4. Java编程常见问题汇总
  5. 【百度地图API】关于如何进行城市切换的三种方式
  6. grunt 上手
  7. SOCKET 编程TCP/IP、UDP
  8. Maven-04: 三套生命周期
  9. C++STL模板库关联容器之set/multiset
  10. 部署springboot工程到linux上及遇到的坑
  11. Unity骨骼动画资源解析与优化
  12. linux----磁盘介绍
  13. 使用GrabCut提取前景图像的示范代码
  14. 一步步创建第一个Docker App —— 4. 部署应用
  15. QT学习笔记9:QTableWidget的用法总结
  16. newton法分形图
  17. Python开发【Django】:缓存、信号
  18. SQL Serever学习11——数据库的安全管理
  19. Python编程
  20. 【洛谷】P1379 八数码难题(bfs)

热门文章

  1. Python内置函数之range()
  2. spring download
  3. SQLSERVER---- 通过位运算更改标志位
  4. shader一些语义或术语的解释
  5. urllib.urlencode() 无法encode中文, UnicodeEncodeError
  6. obj-c学习笔记
  7. pip源提示“not a trusted or secure host” 解决
  8. 【BZOJ2337】[HNOI2011]XOR和路径 期望DP+高斯消元
  9. 频繁加载、删除swf造成flash崩溃解决办法
  10. css position: relative,absolute具体解释