摘要: 题意:将序列1,2,3,……,n,用不超过2n^2次操作,通过下列操作变成给定序列。(1<=n<=300) 1、交换前两个元素 2、将第一个元素移到最后 分析:因为将序列变成升序更容易操作,所以倒着输出解,进行如下操作: 1、交换前两个元素 2、将最后一个元素移到第一个(当a[0] < a[1] | 阅读全文
posted @ 2017-02-08 17:31 Somnuspoppy 阅读(242) 评论(0) 推荐(0)
摘要: 题意:输入一个1~n(1<=n<=10000)的排列,用不超过9^6次操作把它变成升序。每次操作都可以选一个长度为偶数的连续区间,交换前一半和后一半。 提示:2n次操作就足够了。 分析:从左到右依次将数字i放在位置i。 设要将数字i放在位置i,而数字i现在在位置pos。 (1)若(pos - i) 阅读全文
posted @ 2017-02-08 16:15 Somnuspoppy 阅读(314) 评论(0) 推荐(0)
摘要: 题意:输入1~n的一个排列(3<=n<=500),每次可以交换两个整数。用最少的交换次数把排列变成1~n的一个环状序列。 分析:正序反序皆可。枚举每一个起点,求最少交换次数,取最小值。 求最小交换次数solve函数,将所有不需要交换的数字用cnt统计出来,而需要交换的数字集合(个数为n)交换次数是n 阅读全文
posted @ 2017-02-08 13:46 Somnuspoppy 阅读(221) 评论(0) 推荐(0)