D. Lucky Permutation 置换环,仅有一个连续的逆序的理解

news/2024/11/28 19:33:11/

Problem - D - Codeforces 

 D. Lucky Permutation(置换环)-CSDN博客

如果环中,有相邻的两个点,那么可以通过减少一次交换,使得其贡献出一个逆序对。 

感觉这个博客对于最后逆序说的还是不太好理解,这个结论如何证明呢?

枚举情况理解:

2 1 3 4

连续的数如果“被动归位”(置换环的数都是主动回到自己位置),说明环内没有别的数了,只有环内其余数都归位,这个没动过数才会归位。(所以n-1次)

就对1 2 来说吧,1,2在环中时

如果不动 1 2,他们永不归位,最后会到对方的位置,正好符合一个连续逆序对。

(自己想想,)

——————

环是越来越小的,每次交换两个数是为了让一个数回自己的位置,如果另一个数也回去了,说明只剩两个数了。

1,2可能不在环内连着,但是慢慢的会靠近。

map<int, bool>ring;void solve()
{int n;cin >> n;vector<int>arr(n + 1);vector<int>vis(n + 1);int flag = 0;for (int i = 1; i <= n; i++){cin >> arr[i];}int ans = 0;for (int i = 1; i <= n; i++){if (vis[i] || arr[i] == i)continue;int cur = i;int tmp = 0;ring.clear();while (vis[cur] == 0){vis[cur] = 1;ring[cur] = 1;if (ring[cur + 1] || ring[cur - 1]){flag = 1;}cur = arr[cur];tmp++;}ans += tmp - 1;}if (flag)cout << ans - 1 << endl;elsecout << ans + 1 << endl;
}
signed main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int t = 1;cin >> t;while (t--){solve();}return 0;
}


http://www.ppmy.cn/news/1353676.html

相关文章

C++学习:pair

pair的定义和结构 在C中&#xff0c;pair是一个模板类&#xff0c;用于表示一对值的组合。它位于头文件中。pair类的定义如下: pair类模板有两个模板参数&#xff0c;T1和T2&#xff0c;分别表示第一个值和第二个值的类型。 pair类有两个成员变量&#xff0c;first和second&…

SpringBoot 整合 Redis 全面教程:从配置到使用

Redis 是一种高性能的键值存储数据库&#xff0c;而 Spring Boot 是一个简化了开发过程的 Java 框架。将两者结合&#xff0c;可以轻松地在 Spring Boot 项目中使用 Redis 来实现数据缓存、会话管理和分布式锁等功能。 一、添加 Redis 依赖 在 pom.xml 文件中添加 Redis 相关…

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱9(附带项目源码)

效果演示 文章目录 效果演示系列目录前言箱子库存源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中&#xff0c;我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存…

【吴恩达·机器学习】第三章:分类任务:逻辑回归模型(交叉熵损失函数、决策边界、过拟合、正则化)

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024每日一言&#x1f33c;: 勇敢的人&#xff0c;不是不落泪的人&#xff0c;而是愿意含着泪继续奔跑的人。 ——《朗读者》 0、声明 本系列博客文章是博主本人根据吴…

C/C++如何把指针所指向的指针设为空指针?

实践出真知&#xff0c;指针对于初学的友友来说&#xff0c;头都要大了。喵喵一直遵循在实践中学&#xff0c;在学习中实践&#xff0c;相信你也会有所得&#xff01; 以下是该问题的解决方案&#xff1a; int** ptrPtr new int*; // 创建指向指针的指针 int* ptr new int;…

MATLAB Coder从入门到放弃

一、MATLAB Coder入门 1 MATLAB Coder是什么 从 MATLAB 代码生成 C 和 C 代码 MATLAB Coder™ 可从 MATLAB 代码生成适用于各种硬件平台&#xff08;从桌面计算机系统到嵌入式硬件&#xff09;的 C 和 C 代码。它支持大多数 MATLAB 语言和广泛的工具箱。您可以将生成的代码作…

Python setattr函数

在Python编程中&#xff0c;setattr()函数是一个有用且灵活的内置函数&#xff0c;用于设置对象的属性值。它可以在运行时动态地设置对象的属性&#xff0c;无论是新建对象还是已有对象。本文将深入探讨setattr()函数的用法、语法、示例代码&#xff0c;并探讨其在实际编程中的…

Spring AMQP(3.1.1)设置ConfirmCallback和ReturnsCallback

文章目录 一、起因二、代码1. 定义exchange和queue2. RabbitTemplate3. EnhancedCorrelationData4. 发送消息 环境如下 VersionSpringBoot3.2.1spring-amqp3.1.1RabbitMq3-management 一、起因 老版本的spring-amqp在CorrelationData上设置ConfirmCallback。但是今天却突然发…