(2021 ICPC)亚洲区域赛(昆明)J.Parallel Sort(思维)

2023-10-30 03:58

本文主要是介绍(2021 ICPC)亚洲区域赛(昆明)J.Parallel Sort(思维),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:https://ac.nowcoder.com/acm/contest/12548/J

分析

数字所要去的位置会形成一个循环关系,如 2 3 4 1 ,会形成如下的循环关系:
2 要到 3 的位置,3 要到 4 的位置 4 要到 1 的位置:
在这里插入图片描述
我们如果将其进行对称交换,会发现下一轮只要再换一次就可以有序。
所以最多只要进行两轮交换。

代码
#include<bits/stdc++.h>
using namespace std;int n,cnt;
int a[100005];
vector<int> ans[3],tmp;
map<int,int> vis;int main()
{int flag = 1;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(a[i] != i) flag = 0;}if(flag == 1){cout<<"0\n";return 0;}cnt++;vis.clear();for(int i=1;i<=n;i++){if(vis[i] == 1) continue;if(i != a[i]){if(a[a[i]] == i){int to = a[i];if(vis[to] == 1) continue;vis[i] = vis[to] = 1;ans[cnt].push_back(i);ans[cnt].push_back(to);swap(a[i],a[to]);}else{tmp.clear();int tt = 0;for(int to=a[i];vis[to]!=1;to=a[to]){vis[to] = 1;tmp.push_back(to);}for(int j=0,k=tmp.size()-1;j<k;j++,k--){ans[cnt].push_back(tmp[j]);ans[cnt].push_back(tmp[k]);swap(a[tmp[j]], a[tmp[k]]);}}}}flag = 1;for(int i=1;i<=n;i++) if(a[i] != i){flag = 0;break;}if(flag == 1){cout<<"1\n"<<(ans[1].size() / 2)<<" ";for(int i=0;i<ans[1].size();i++) cout<<ans[1][i]<<" ";cout<<"\n";return 0;}cnt++;for(int i=1;i<=n;i++){if(i == a[i]) continue;int to = a[i];ans[cnt].push_back(i);ans[cnt].push_back(to);swap(a[i], a[to]);}cout<<"2\n";cout<<(ans[1].size() / 2)<<" ";for(int i=0;i<ans[1].size();i++) cout<<ans[1][i]<<" ";cout<<"\n";cout<<(ans[2].size() / 2)<<" ";for(int i=0;i<ans[2].size();i++) cout<<ans[2][i]<<" ";cout<<"\n";//cout<<"ans: ";//for(int i=1;i<=n;i++) cout<<a[i]<<" ";return 0;
}

这篇关于(2021 ICPC)亚洲区域赛(昆明)J.Parallel Sort(思维)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/305422

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

颠覆你的开发模式:敏捷思维带来的无限可能

敏捷软件开发作为现代软件工程的重要方法论,强调快速响应变化和持续交付价值。通过灵活的开发模式和高效的团队协作,敏捷方法在应对动态变化和不确定性方面表现出色。本文将结合学习和分析,探讨系统变化对敏捷开发的影响、业务与技术的对齐以及敏捷方法如何在产品开发过程中处理持续变化和迭代。 系统变化对敏捷软件开发的影响 在敏捷软件开发中,系统变化的管理至关重要。系统变化可以是需求的改变、技术的升级、

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib

[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

题目来源 NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem   [SWPUCTF 2021 新生赛]gift_F12 这个题目简单打开后是一个网页  我们一般按F12或者是右键查看源代码。接着我们点击ctrl+f后快速查找,根据题目给的格式我们搜索c

JVM - Java内存区域

文章目录 目录 文章目录 运行时数据区域 程序计数器 栈 Java虚拟机栈 本地方法栈 栈帧的组成 局部变量表 操作数栈 帧数据 堆 方法区 直接内存 总结 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而一直存在,有的区域则是依赖

Ai+若依(智能售货机运营管理系统---帝可得)-人员管理-点位管理-区域管理-合作商管理----【08篇---0001:上】

项目介绍 售货机简介 帝可得是一个基于物联网概念下的智能售货机运营管理系统 物联网 物联网(IoT:Internet of Things)简单来说,就是让各种物品通过互联网连接起来,实现信息的交换和通信。 这个概念听起来可能有点抽象,但我们可以把它想象成一个超级大的社交网络。不过,这个网络里的成员不是人类,而是各种物品。比如,你的冰箱、洗衣机、甚至是你的汽车,它们都可以通过互联网互