当前位置: 首页 > news >正文

题解:CF351B Jeff and Furik

题目传送门

题意

给定一个排列,有两个人轮流操作,第一个人每次可以减少一个逆序对,第二个人每次有 \(50\%\) 的概率减少一个逆序对,也有 \(50\%\) 的概率增加一个逆序对,求让这个序列不含逆序对的最小操作期望。

思路

显然,我们可以列出转移方程:

\[f_i=2+0.5\times f_i+0.5\times f_{i-2} \]

\(f_i\) 表示含有 \(i\) 个逆序对的最小操作期望。我们把两个人都操作一次设为一组,那么每组操作有 \(50\%\) 的概率使逆序对数量不变,有 \(50\%\) 的概率使逆序对的数量减少两个,所以 \(f_i=2+0.5\times f_i+0.5\times f_{i-2}\)

最后我们可以用 \(O(n^2)\) 的复杂度求出有多少逆序对,再 \(O(1)\) 计算即可。设 \(ans\) 为逆序对数,如果 \(ans\) 是偶数,那么答案即为 \(ans\times 2\),如果是奇数,那么就是 \(ans\div 2\times 4+1\)

注意边界条件,\(f_0=0\)\(f_1=1\) 因为只有一个逆序对时,第一个人可以直接更改,所以只操作一次。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1010101;
ll n,a[N],ans,dp[N];
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(a[i]>a[j])ans++;cout<<(ans&1)+(ans)/2*4;return 0;
}
http://www.wxhsa.cn/company.asp?id=587

相关文章:

  • 题解:CF2118D1 Red Light, Green Light (Easy version)
  • Project Euler题解思路导航(私人)
  • 27届春招备战一轮复习--第五期
  • 阅读方式
  • Audition 2025(AU2025)超详细直装版下载安装教程保姆级
  • pg 解析select语句的返回值
  • 长乐一中 CSP-S 2025 提高级模拟赛 Day2
  • 费用流
  • [豪の学习笔记] 软考中级备考 基础复习#6
  • RAG
  • 手撕深度学习:矩阵求导链式法则与矩阵乘法反向传播公式,深度学习进阶必备!
  • CF *3200
  • 分享我在阿贝云使用免费虚拟主机的真实体验!
  • 软件测试工程师的职业天花板在哪里?如何突破?
  • 02020213 .NET Core重难点知识13-配置日志邮件服务案例、DI读取、DI与扩展方法、VS配置项目环境变量
  • GJOI 模拟赛题记录声明
  • Ubuntu 卸载 Firefox 浏览器
  • 录无法修改OneDrive文件的解决方法
  • 量子机器学习入门:三种数据编码方法对比与应用
  • 向量数据库
  • UGNX2506下载和安装教程包含激活教程步骤(超详细保姆级图文UGNX安装步骤)
  • ansible剧本
  • uniapp插件开发
  • 【模板】平面最近点对
  • npx playwright install chromium 安装失败,如何离线安装
  • Power BI制作指标达成跟踪器
  • 软件工程第一次作业
  • 一个基于 .NET 开源、轻便的 Windows 优化工具,适用于 Win7 - Win11 最新版的优化!
  • 两种求快速幂的方法
  • 杂题20250909-