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

【补题】Codeforces Global Round 20 F1. Array Shuffling

声明:本学习笔记参考来源CF1672F1 Array Shuffling - 洛谷的题解,里面有这题的详细证明,有更优秀的代码,本篇甚至有点偷工减料,仅仅是多了本人自己的理解。

题意:给定序列A,问你能不能给出序列B,使得小O在执行使任意两个位置的数字随意交换的操作,让B变成A操作次数最多的序列B。

思路:      本篇没有证明,只是个人模拟赛时的思考

1.首先思考到假设所有的数字不相同,其实你会想到一个很简单的构造方式,那就是所有的数字统一向某一个方向移动一次。一定会导致所有的数字错开,并且一定要一遍一遍操作。
其实就是让每一个数字都不在原本的位置上,且不会出现交换后直接安置好了两个位置

2.数字相同的时候似乎出现了问题,因为左移一位使的还有数字可能停留在大小一样的数字上面,根据上面的结论,考虑安排几个数字在不相同的情况下,不处在自己原本位置即可。
那也就是安排一些数字形成环,然后进行位移,但是这会轻易的WA,问题在于简单的移动环,可能会导致环之间产生反应,出现了交换后安置在正确的位置。

3.考虑一种构造模式,按照数字的大小排序后,利用数字的大小进行位移,而不是下标。这样每一个数字一定不会在正确的位置的同时,两个环就算出现反应也是同效,因此构造成功。

环就是按照那个数字曾经的出现次数安置在相同环中即可

代码:

#include <bits/stdc++.h>
#define int long long
#define int128 __int128
#define IOS                       \std::ios::sync_with_stdio(0); \std::cin.tie(0);              \std::cout.tie(0);
const int N = 2e5 + 10;
const int INF = 1e18;
const int MOD = 998244353;int cnt[N];
std::vector<int> buk[N];
int ve[N];int cmp(const int &a, const int &b)
{return ve[a] > ve[b];
}void solve()
{int n;std::cin >> n;for (int i = 1; i <= n; i++){cnt[i] = 0;buk[i].clear();}for (int i = 0; i < n; i++){std::cin >> ve[i];++cnt[ve[i]];buk[cnt[ve[i]]].push_back(i);}for (int i = 1; i <= n; i++){std::sort(buk[i].begin(), buk[i].end(), cmp);for (int j = 1; j < buk[i].size(); j++){std::swap(ve[buk[i][j - 1]], ve[buk[i][j]]);}}for (int i = 0; i < n; i++){std::cout << ve[i] << " ";}std::cout << '\n';
}signed main()
{IOS;int t = 1;std::cin >> t;while (t--){solve();}
}

http://www.xdnf.cn/news/2186.html

相关文章:

  • Python循环中断:break和continue,循环else语法,综合案例
  • 一、人类社会结构的根本逻辑
  • Cribl 上传lookup 表,传入数据进event
  • 计算机网络的五层结构(物理层、数据链路层、网络层、传输层、应用层)到底是什么?
  • 揭开人工智能的神秘面纱:从概念到人工神经网络
  • Spring和Spring Boot集成MyBatis的完整对比示例,包含从项目创建到测试的全流程代码
  • 数据库系统概论(四)关系操作,关系完整性与关系代数
  • springboot集成MyBatis Generator快速开发
  • Pygame跨平台打包:将游戏发布到Windows、Mac和Linux
  • 当JIT遇见K8s
  • 如何下载VSCode插件市场为VSIX文件
  • 在Mybatis中为什么要同时指定扫描mapper接口和 mapper.xml 文件,理论单独扫描 xml 文件就可以啊
  • Maven进阶知识
  • 【TypeScript】速通篇
  • 打破云墙:多云环境中的DevOps实践指南
  • 5.3/Q1,GBD数据库最新文章解读
  • 【Java面试笔记:进阶】22.AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?
  • QQMusic项目功能总结
  • openEuler对比CentOS的核心优势分析
  • Web端ER可视化
  • 部署大模型需要多少GPU显存?以DeepSeek R1部署为例
  • MongoDB Atlas与MongoDB连接MCP服务器的区别解析
  • SpringBoot物资管理系统 | JavaWeb项目设计与实现
  • 山东大学离散数学第九章习题解析
  • 雪花算法
  • 深入解析NuttX:为何它是嵌入式RTOS领域的标杆?​​
  • 多模态大语言模型arxiv论文略读(四十三)
  • 力扣2444. 统计定界子数组的数目:Java三种解法详解
  • 5G助力智慧城市的崛起——从概念到落地的技术实践
  • 哈希表的模拟实现---C++