首页 > 其他分享 >CF351B Jeff and Furik 题解

CF351B Jeff and Furik 题解

时间:2022-09-01 09:11:39浏览次数:72  
标签:Jeff 题解 0.5 CF351B 操作 Furik include 逆序

CF351B Jeff and Furik

有一个长度为n的排列p,Jeff每次操作选两个相邻元素交换,Furik每次操作随机执行下列操作之一:

1.对于所有p[i]<p[i+1],随机取一对p[i]与p[i+1]交换
2.对于所有p[i]>p[i+1],随机取一对p[i]与p[i+1]交换

两个操作被选中的概率均为0.5。如果一个操作无法进行,那么furik必定会进行可以进行的操作。

两人轮流操作,Jeff先手。当排列为升序时,游戏结束。 Jeff希望游戏尽早结束,那么在Jeff每次操作最优的情况下,游戏结束时两人操作次数的期望值是多少?。

换个角度思考问题。题目的目的即是使得这个排列的逆序对数量变为 \(0\) 且操作数量最少。

可以发现 Jeff 每次操作可以减少一个逆序对。

Furik 操作,有 \(0.5\) 的概率增加一个逆序对,\(0.5\) 的概率减少一个逆序对。所以每操作两次,有 \(0.5\) 的概率减少两个逆序对,\(0.5\) 的概率逆序对数量不变。也就说每 \(2\) 次操作逆序对期望减少 \(1\) 个。

因为他俩的操作也分先后,所以奇偶分类讨论一下,假设逆序对有 \(x\) 个:

  • 奇数个逆序对,操作次数为 \(2x-1\)。
  • 偶数个逆序对,操作次数为 \(2x\)。

统计逆序对树状数组即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>

using namespace std;
typedef long long ll;
inline ll read(){
	ll x=0,f=1;char ch=getchar();
	while(ch<'0'||'9'<ch){if(ch=='-')f=-1;ch=getchar();}
	while('0'<=ch&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return x*f;
}
const int N=500005;
int n,a[N],cnt;
struct BIT{
	int c[N];
	inline int lowbit(int x){return x&-x;}
	inline void update(int i,int v){for(;i<=n;i+=lowbit(i))c[i]+=v;}
	inline int getsum(int i){int ans=0;for(;i;i-=lowbit(i))ans+=c[i];return ans;}
}c;

int main(){
	n=read();
	for(int i=1;i<=n;++i)a[i]=read();
	for(int i=n;i>=1;--i){
		cnt+=c.getsum(a[i]);
		c.update(a[i],1);
	}
	if(cnt&1){printf("%.6lf\n",2.0*cnt-1.0);}
	else printf("%.6lf\n",2.0*cnt);
	return 0;
}

标签:Jeff,题解,0.5,CF351B,操作,Furik,include,逆序
From: https://www.cnblogs.com/BigSmall-En/p/16645292.html

相关文章

  • onenote突然无法同步,同步报错以及创建笔记本都报错问题解决
    同步报错:OneNote当前无法同步笔记。将继续尝试。(错误代码:0x80004005bdf5j)创建笔记本报错:OneNote无法在以下位置新建笔记本打开笔记本报错:无法打开笔记本无法打开......
  • hzx的CSP-J模拟赛题解
    T1按题意模拟即可,注意不用考虑闰年。T2\(30\%\)的数据:使用\(Floyd\)求出图的全源最短路,时间复杂度\(O(n^3)\)。\(50\%\)的数据:对图上每个点使用\(Dijkstra\)求......
  • P1004 [NOIP2000 提高组] 方格取数 题解
    [NOIP2000提高组]方格取数题目描述设有\(N\timesN\)的方格图\((N\le9)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字\(0\)。如下图所示(见样例):......
  • iOS自动化真机测试验证环境过程中常见问题解析
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取本章节主要讲解iOS自动化真机配置以及在iOS真机执行自动化时常见问题与解决方法。真机使......
  • LG3565 [POI2014]HOT-Hotels 题解
    P3565[POI2014]HOT-Hotels给定一棵树,在树上选\(3\)个点,要求两两距离相等,求方案数。原题数据范围\(n\leq5000\),可做到线性,空间\(62.5\text{MB}\)。sub1\(n\leq......
  • vue中render中src不生效问题解决
    在vue文件中写html代码的话可以直接用<imgsrc="xxx"/>但是在render中就不能正常工作。原理度娘上有,那render中要使用的话需要加requirerender<imgsrc={required(......
  • luoguP8085 [COCI2011-2012#4] KRIPTOGRAM 题解(KMP)
    /*给定明文和密文,密文与明文的某个字串格式相同,找出密文出现的最早位置。如:明文aaabcdabc 密文xy ans:3解:容易想到KMP算法。可以发现,密文和对应子串的格式相同......
  • 题解 AT5635 Shortest Path on a Line(线段树优化建图)
    题解AT5635ShortestPathonaLineDescription题目传送门题面翻译有一张有\(N\)个点,编号为\(1-N\)的无向图。做\(M\)次操作,每次操作给出三个正整数\(L,R,......
  • Jenkins 踩坑 | job 创建、参数化、定时构建及时区偏差问题解决
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取1)启动Jenkins后在首页点击"开始创建一个新任务"。2)输入任务名称,选择自由风格,点击“确定”。......
  • 【题解】SP8836 SEQ7
    LinkPrologue大大滴诈骗题/ohDescription定义数列\(\{g(n)\}_{n\in\mathbbN^*}\):\(g(1)=1\),\(g(n)\)为\(n\)在数列中出现的次数。给定\(n\)(\(n\le10^{13}\)),......