UVA 11925 Generating Permutations 生成排列 (序列)
2015-08-03 23:50
323 查看
题意:要用一个有序的序列生成给定序列,操作有两种,一是交换前两个元素,二是把第一个元素移动到最后去。
思路有两种:
1.映射,把给定序列映射成有序的序列,然后按照同样的替换规则把有序的序列映射掉,然后就可以排序啦。
具体解释可以看SRM 664的C题
2.逆向思考,把给定序列变成有序,操作相应变化一下,最后逆序输出操作。
至于排序的问题,把序列看成一个环,第二种操作相当改变了可交换元素的位置,然后就可以等效为冒泡排序啦。。。
第二种思路需要注意的一点是,是因为是环状的,和冒泡排序有所区别,最大的元素在头部的时候不能进行交换了,否则陷入死循环,最大的元素所在的位置相当与链状时候的最后面的有序区,是不需要比较的。
冒泡排序一次交换恰好消除一个逆序对,因此判断终止可以先求出逆序对总数,交换一次逆序数减一
思路有两种:
1.映射,把给定序列映射成有序的序列,然后按照同样的替换规则把有序的序列映射掉,然后就可以排序啦。
具体解释可以看SRM 664的C题
2.逆向思考,把给定序列变成有序,操作相应变化一下,最后逆序输出操作。
至于排序的问题,把序列看成一个环,第二种操作相当改变了可交换元素的位置,然后就可以等效为冒泡排序啦。。。
第二种思路需要注意的一点是,是因为是环状的,和冒泡排序有所区别,最大的元素在头部的时候不能进行交换了,否则陷入死循环,最大的元素所在的位置相当与链状时候的最后面的有序区,是不需要比较的。
冒泡排序一次交换恰好消除一个逆序对,因此判断终止可以先求出逆序对总数,交换一次逆序数减一
#include<bits/stdc++.h> using namespace std; int a[360],t[360],inv; void merge_sort(int l,int r) { if(l == r) return; int mid = (l+r) >> 1; merge_sort(l,mid); merge_sort(mid+1,r); int p = l, q = r, k = l; while(p <= mid && q <= r){ if(a[p]>a[q]) { inv += mid - p + 1; t[k++] = a[q++]; } else { t[k++] = a[p++]; } } if(p>mid) for(int i = q; i <= r; i++) t[k++] = a[i]; else for(int i = p; i <= mid; i++) t[k++] = a[i]; for(k = l; k <= r; k++) a[k] = t[k]; } int main() { //freopen("in.txt","r",stdin); int n, b[360]; while(scanf("%d",&n),n){ for(int i = 0; i < n; i++) { int t; scanf("%d",&t); b[t-1] = i; } memcpy(a,b,sizeof(int)*n); inv = 0; merge_sort(0,n-1); for(int i = n-1; i >= 1 && inv ; i--){ for(int j = 0; j < i; j++){ if( b[j] > b[j+1]) { swap(b[j],b[j+1]); putchar('1'); inv--; } putchar('2'); } //continue move i -> 1 for(int j = i; j < n ;j++){ putchar('2'); } } putchar('\n'); } return 0; }
相关文章推荐
- git 的分支体系命令汇总
- SetTimeOut jquery的作用
- 设计模式01: Singleton 单例模式(创建型模式)
- NOJ 2079 Prime (莫比乌斯反演)
- hdu-5318 The Goddess Of The Moon(2015 Multi-University Training Contest 3)
- BootStrap导航的创建2
- 灾情巡视路线模型
- 转!! Java中ThreadLocal的设计与使用
- _DataStructure_C_Impl:链栈
- volley跟ssh服务结合使用
- shuoj-小6的多米诺骨牌-双向dp
- JSP -2
- 228 Summary Range
- iOS开发——UI进阶篇(十四)modal
- _DataStructure_C_Impl:共享栈
- rsync服务搭建
- 应用洪峰应对规范
- ROS学习--(十四)编写简单的Service和Client
- js中的内部属性与delete操作符
- [2015hdu多校联赛补题]hdu5324 Boring Class