1067. Sort with Swap(0,*) 解析
来源:互联网 发布:kt交易师软件下载 编辑:程序博客网 时间:2024/06/06 17:15
用map做个映射表,映射为-1的时候就是被访问了。我的方法是模拟整个过程
0不参加访问标记,因为0回到自己的位置会有两种情况
1、排序没有完成
2、排序完成
两种情况要分开讨论。
注意再访问是否被访问的时候因为是顺序访问,记录每次访问的终点,下次查询是否访问从那里开始,不然会超时。
#include <iostream>#include <vector>#include <map>#define MAX 100010using namespace std;int n;int list[MAX];int c = 0;int pos = 1;map <int, int> n2r;map <int, int> r2n;void swap(){#ifdef _DEBUGcout << "-------------" << endl;for (int i = 0; i < n; i++) {cout << i << " : " << n2r[i] << endl;}#endifif (n2r[0] != 0) { //0 不在0位 未排序完int p1 = n2r[0]; //0的位置int p2 = n2r[p1]; //0的位置对应的数的位置c++;n2r[0] = p2; n2r[p1] = -1;//清除swap();}else {//0在原点可能排完 也可能没排完bool tag = false;for (int i = pos; i < n; i++) {if (n2r[i] > 0) { //没访问过n2r[0] = i;n2r[list[i]] = 0;tag = true;c++;pos = i;break;}}if (tag == false) {//排序完成cout << c << endl;}elseswap();}}int main() {cin >> n;for (int i = 0; i < n; i++) {scanf("%d", &list[i]);if(list[i] == i && list[i] != 0)//0不参与标记n2r[list[i]] = -1;//在自己的位置不用交换elsen2r[list[i]] = i;}swap();return 0;}
0 0
- 1067. Sort with Swap(0,*) 解析
- 1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067.Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*)
- 1067. Sort with Swap
- 【PAT】1067. Sort with Swap(0,*)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- pat 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- Codeforces Round #401 (Div. 2)C. Alyona and Spreadsheet(暴暴暴力)
- 树的直径 —— 即一棵树的最长路 附题(大臣的旅费 by蓝桥杯)
- PAT甲级1026. Table Tennis (30)
- struts2:二
- 每日一省之————加权无向图的最小生成树算法(Prim/Kruskal算法)
- 1067. Sort with Swap(0,*) 解析
- 第58篇老师端私有白板展示(一)老师端详细建私有白板及PHP array_reverse 周一
- 统计对象中有几个属性
- Readonly和Disabled的区别
- babel总结
- linux 下 select 编程
- idea for mac快捷键
- 1.2 产品最终定位的心得体会
- 集成模型的五个基础问题