博客
关于我
POJ 4020 NEERC John's inversion 贪心+归并求逆序对
阅读量:793 次
发布时间:2023-03-03

本文共 1307 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要找到一种排列方式,使得对应颜色数字之间的逆序对总数最小。以下是详细的解决方法:

方法思路

  • 理解逆序对:逆序对是指在一个序列中,i < j 但 a[i] > a[j] 的情况。我们需要最小化蓝色和红色数字之间的逆序对总数。
  • 贪心策略:首先对蓝色数字进行排序,使其逆序对为0。然后处理红色数字时,尽可能交换它们来消除逆序对。
  • 归并排序:归并排序是一种有效计算逆序对的方法。归并过程中,统计左边元素大于右边元素的情况,累加逆序对的数量。
  • 解决代码

    #include 
    #include
    #include
    #include
    using namespace std;
    void merge_sort(vector
    &a, int l, int r, vector
    &t) { if (l >= r) return; int mid = l + (r - l) / 2; merge_sort(a, l, mid, t); merge_sort(a, mid + 1, r, t); int i = l, j = mid + 1; while (i <= mid && j <= r) { if (a[i] > a[j]) { t.push_back(a[j]); j++; } else { t.push_back(a[i]); i++; } } while (i <= mid) t.push_back(a[i]); while (j <= r) t.push_back(a[j]); for (int k = l; k <= r; ++k) { a[k] = t[k]; } } void main() { int n; scanf("%d", &n); vector
    a(n); for (int i = 0; i < n; ++i) { int r, b; scanf("%d", &r); scanf("%d", &b); a[i] = b; } sort(a.begin(), a.end()); vector
    t; merge_sort(a, 0, n-1, t); long long cnt = 0; for (int i = 0, j = 1; i < n; ++i, j++) { if (a[i] > a[j]) { cnt += n - j; j++; } } printf("%lld", cnt); }

    代码解释

  • 归并排序函数merge_sort函数对数组进行归并排序,并在合并过程中统计逆序对的数量。
  • 主函数:读取输入,排序数组,调用归并排序计算逆序对总数,并输出结果。
  • 通过这种方法,我们可以高效地找到逆序对总数最小的排列方式。

    转载地址:http://ybxfk.baihongyu.com/

    你可能感兴趣的文章
    pip 或 pip3 为 Python 3 安装包?
    查看>>
    pip 文件损坏导致 pip无法使用 报错 ImportError: cannot import name 'main' from 'pip._int
    查看>>
    pip/pip3更换国内源
    查看>>
    pip3 install PyQt5 --user 失败
    查看>>
    pip3命令全解析:Python3包管理工具的详细使用指南
    查看>>
    pip3安装命令重复创建文件‘/tmp/pip-install-xxxxx/package‘失败
    查看>>
    PIPE 接口信号列表
    查看>>
    pipeline配置与管理Job企业级实战
    查看>>
    pipeline项目配置实战
    查看>>
    Pipenv 与 Conda?
    查看>>
    QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
    查看>>
    pipreqs : 无法将“pipreqs”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。
    查看>>
    pipy国内镜像的网址
    查看>>
    quiver绘制python语言
    查看>>
    pip下载缓慢
    查看>>
    PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
    查看>>
    pip命令提示unknow or unsupported command install解决方法
    查看>>
    pip在安装模块时提示Read timed out
    查看>>
    pip更换源
    查看>>
    SpringBoot之Banner源码深度分解
    查看>>