智乃的逆序数

news/2025/1/30 11:44:58/文章来源:https://www.cnblogs.com/onlyblues/p/18695108

智乃的逆序数

题目描述

定义一个序列是“紧密”的,当且仅当序列从小到大排序后,相邻数字的差值是 $1$;

定义两个序列不相交的,当且仅当两个序列没有相同元素;

逆序数指的是在一个序列或者数组中,有多少对 $i,j$ 满足 $i<j$ 且 $a_i>a_j$;

子序列为从原数组中删除任意个(可以为零、可以为全部)元素后剩余部分保留原本顺序得到的新序列。

现在智乃给你 $n$ 个互不相交的“紧密”序列,请你构造一个长度为 $n$ 个序列的长度之和的新序列,要求新序列只能由这 $n$ 个“紧密”序列中出现的元素组成,要求每个元素都被使用到且仅使用一次,同时要求新序列包含这 $n$ 个“紧密”序列作为子序列,逆序数恰好为 $k$。

你可以认为是要求你将它们放在一起同时排序,并且保留在原序列的相对顺序,如果本来不属于同一序列,则它们之间没有限制。

输入描述:

第一行输入两个正整数 $n,k \, (1 \leq n \leq 1000,0 \leq k \leq 10^6)$。

此后 $n$ 行,第 $i$ 行先输入一个正整数 $l_i$ 表示序列的长度,随后输入 $l_i$ 个正整数 $a_{i,1}, a_{i,2}, \ldots, a_{i,l_i} \, (1 \leq a_{i,j} \leq 10^9)$,代表给定的第 $i$ 个“紧密”序列。

除此之外,保证单个测试文件的 $l_i$ ​之和不超过 $10^3$。

输出描述:

如果不存在这样的序列,直接输出 $\text{No}$;否则,在第一行输出 $\text{Yes}$,然后在第二行输出你构造的新序列。

如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。

示例1

输入

2 21
5 2 5 3 4 1
4 7 9 8 6

输出

Yes
2 5 7 9 8 3 6 4 1

示例2

输入

2 1000000
5 100000002 100000005 100000003 100000004 100000001
4 100000007 100000009 100000008 100000006

输出

No

 

解题思路

  每个序列排序后元素是相邻的,意味着每个序列其实就是值域内连续的一段。又因为任意两个序列没有交集,意味着这些序列存在明确的大小关系(一个序列内所有元素均比另外一个小或大)。因此如果以序列的最小值(其实任意一个元素都可以)为关键字对序列进行从小到大排序,此时得到的逆序对最少,均由每个序列的内部产生。所以如果整体的逆序对数量比 $k$ 大则无解。同理将序列从大到小排序,此时得到的逆序对最多,如果整体的逆序对数量比 $k$ 小则无解。

  否则有解,我们一定可以在对序列从小到大排序后的基础上通过交换元素使得整体的逆序对数量达到 $k$。在冒泡排序中,每次交换相邻两个元素会使整体的逆序对数量减 $1$,在整个过程中交换的次数就是总的逆序对数量。所以我们可以模拟一遍冒泡排序,如果发现前一个元素比后一个小,那么就交换这两个元素,整体的逆序对会恰好加 $1$。当然这两个元素能交换的前提是不能来自同一个序列,这是因为题目要求序列每个元素的相对顺序要求保持不变。

  通过冒泡排序来逐个增加或减少逆序对的构造方法还是第一次见,不过这种做法的局限性是要求 $n$ 比较小。

  AC 代码如下,时间复杂度为 $O(n^2)$:

#include <bits/stdc++.h>
using namespace std;typedef long long LL;const int N = 1005;vector<int> g[N];int main() {int n, m;cin >> n >> m;for (int i = 0; i < n; i++) {int c;cin >> c;while (c--) {int x;cin >> x;g[i].push_back(x);}}sort(g, g + n, [&](vector<int> &a, vector<int> &b) {return a[0] < b[0];});vector<array<int, 2>> p;for (int i = 0; i < n; i++) {for (auto &x : g[i]) {p.push_back({i, x});}}for (int i = 0; i < p.size(); i++) {for (int j = 0; j < i; j++) {if (p[i][1] < p[j][1]) m--;}}if (m < 0) {cout << "No";return 0;}for (int i = 0; i < p.size(); i++) {for (int j = 0; j + 1 < p.size(); j++) {if (p[j][0] != p[j + 1][0] && p[j][1] < p[j + 1][1] && m) {m--;swap(p[j], p[j + 1]);}}}if (m) {cout << "No";}else {cout << "Yes\n";for (auto &q : p) {cout << q[1] << ' ';}}return 0;
}

 

参考资料

  【题解】2025牛客寒假算法基础集训营3:https://ac.nowcoder.com/discuss/1453293

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/877025.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型

目录大模型的演变大模型的使用与训练大模型的特点与分类大模型的工作流程大模型的应用 大模型的演变机器学习:深度学习:大模型的使用与训练 大模型的特点与分类 大模型的工作流程 大模型的应用本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.co…

“星门计划对AI未来的意义——以及谁将掌控它”

“星门计划对AI未来的意义——以及谁将掌控它”图片由DALL-E 3生成就在几天前,唐纳德特朗普宣布了“星门计划”,OpenAI随即跟进,分享了更多细节。他们明确表示,计划在未来四年内投资5000亿美元,在美国为OpenAI构建一个全新的AI基础设施。这让我颇感意外,尤其是考虑到埃隆…

A Critique of ANSI SQL Isolation Levels.18695069

原文:A critique of ANSI SQL isolation levels摘要:ANSI SQL-92[MS, ANSI]使用脏读、不可重复读以及幻读现象(phenomena)定义了隔离级别,本论文展示了这些现象,以及ANSI SQL定义并无法合适的描述众多流行的隔离级别,包括(ANSI标准)所涵盖的级别的标准锁实现。我们还介…

HTML, CSS

什么是 HTML、CSS HTML (HyperText Markup Language): 超文本标记语言. 超文本: 超越了普通文本的限制, 比普通文本更加强大. 除了文字信息, 还可以定义图片、音频、视频等内容. 标记语言: 由标签构成的语言. HTML 标签都是预定义好的。例如: 使用 <a> 展示超链接,使用 &…

Cisco NX-OS System Software - ACI 16.1(2f) - 适用于 ACI 模式下的 Nexus 9000 系列交换机系统软件

Cisco NX-OS System Software - ACI 16.1(2f) - 适用于 ACI 模式下的 Nexus 9000 系列交换机系统软件Cisco NX-OS System Software - ACI 16.1(2f) 适用于 ACI 模式下的 Cisco Nexus 9000 系列交换机系统软件 请访问原文链接:https://sysin.org/blog/cisco-aci-16/ 查看最新版…

Cisco APIC 6.1(2f)F - 应用策略基础设施控制器

Cisco APIC 6.1(2f)F - 应用策略基础设施控制器Cisco APIC 6.1(2f)F - 应用策略基础设施控制器 Application Policy Infrastructure Controller (APIC) 请访问原文链接:https://sysin.org/blog/cisco-apic-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org思科…

[搬运自 qq 空间] 19 北大冬令营小结

PKU 冬令营19北大冬令营小结 北大冬令营刚刚结束 , 以下是这两天以来笔者的经历。 Day1 比赛日 上午开营仪式 , 整个过程大概就是讲了一下北大计算机学科有哪些优势 , 比较无趣。 12 : 40的时候来到机房准备考试 , 1 : 00钟时 , 比赛正式开始。 首先浏览了一下A题 , 是吉…

X3ctf 比赛 Write Up

X3ctf Write Up 1. Misc p11n-trophy(签到题): 题目描述:我们首先会得到这样一份证书:第一题签到题的答案就是证书下面正中间的“This certificate does not grant the rank of Master"。 trophy-plus + trophy-plus64: 这两道目描述一模一样其中一个flag是藏在certif…

python--用户意见

https://www.python.org/about/quotes/

虚拟记账系统之三种结算模式

虚拟记账系统作为近年来支付领域的创新产品,正成为企业资金管理和支付结算的重要工具。本文从支付断直连的背景出发,详细介绍了虚拟记账系统的三种结算模式:收单结算、归集直清和归集调拨,并深入探讨了这些模式在直播电商、企业资金管理等场景中的应用。从这篇文章开始,我…

RocketMQ实战—2.RocketMQ集群生产部署

大纲 1.什么是消息中间件 2.消息中间件的技术选型 3.RocketMQ的架构原理和使用方式 4.消息中间件路由中心的架构原理 5.Broker的主从架构原理 6.高可用的消息中间件生产部署架构 7.部署一个小规模的RocketMQ集群进行压测 8.如何对RocketMQ集群进行可视化的监控和管理 9.进行OS内…