Description

Farmer John has 2^N (1 <= N <= 10) cows, each conveniently labeled
with paint on her flank with a number in the range 1..2^N. They are
standing in a line in some random order. The first cow in line is
cow_1; the second cow in line is cow_2; and so on (1 <= cow_i <=
2^N). Of course, cow_1 is unlikely to carry the painted label 1. He performs the following algorithm to put them in order. 1. If there is more than one cow, then partition the cows into
two equal-sized sub-groups. Sort the first sub-group using
this algorithm and then sort the second sub-group, also using
this algorithm. 2. Consider the current set of cows to be sorted as an equal-length
pair of (potentially huge) base 2^N numbers. If the second
number is smaller than the first one, then swap all the
elements of the second one with those elements of the first
one. The cows would like to know how much distance they cover while
moving around during this 'sorting' procedure. Given the initial configuration of the cows, process the list
according to the algorithm above and then print out: * the sum of the total distances traveled by all cows and * the final configuration of the cows after this 'sorting'
procedure. By way of example, consider this line of 2^3=8 cows: 8 5 2 3 4 7 1 6 First, Farmer John will sort each half of the line separately: 8 5 2 3 | 4 7 1 6 Since each half still has more than one cow, Farmer John will sort
those halves separately; starting with the 'first' half: 8 5 | 2 3 Partitioning again, FJ makes 8 | 5 and 2 | 3 each of which can be sorted by second rule, ultimately yielding: 5 | 8 and 2 | 3 (<--unchanged) The distance traveled by each cow during the first subgroup's sort
is 1, so total_distance_moved becomes 2. The second half is already
sorted, so the total_distance_moved stays at 2. The new configuration
of this sub-group is: 5 8 | 2 3 For step 2 of the algorithm on the subgroup above, we compare the
two sides lexicographically (5 8 vs. 2 3). Since the 2 comes before
5, we swap the two elements of the first half with the corresponding
elements of the second half, yielding: 2 3 5 8 Each of the four cows moved two spaces in this swap, contributing
a total of 8 moves, so total_distance_moved becomes 10. Consider the other half of the cows; we divide the list of four
into two sub-groups: 4 7 | 1 6 Each pair (4, 7) and (1, 6) is already sorted. Comparing (4 7) to (1 6), since 1 comes before 4, we must swap the
two sub-groups: 1 6 4 7 which contributes a total of 8 more moves, bringing total_distanced_move
to 18. After the operations above, the list looks like this (and it's time
for step 2 to be performed on the two groups of 4): 2 3 5 8 | 1 6 4 7 Since 1 comes before 2, we must swap the halves, this yielding this
configuration: 1 6 4 7 2 3 5 8 Since each of 8 cows moved four units, this contributes a total of
32 more moves, making total_distance_moved become 50 Therefore, the answer is 50 and 1 6 4 7 2 3 5 8.

Input

* Line 1: A single integer: N

* Lines 2..2^N + 1: Line i+1 contains a single integer: cow_i

Output

* Line 1: One integer, the total distance traveled by all the cows

* Lines 2..2^N + 1: Line i+1 will contain one integer: the ith cow in
the final configuration
3
8
5
2
3
4
7
1
6
50
1
6
4
7
2
3
5
8
#include<iostream>
#include<cstdio>
#include<algorithm>
const int maxn=1025;
int a[maxn],b[maxn];
int ans,k;
void a_array(int a[],int begin,int mid,int end,int b[])
{
k=0;
if(a[begin]>a[mid+1]){
ans+=(mid+1-begin)*(end-begin+1);
for(int i=mid+1;i<=end;i++)
b[k++]=a[i];
for(int i=begin;i<=mid;i++)
b[k++]=a[i];
}
else {
for(int i=begin;i<=mid;i++)
b[k++]=a[i];
for(int i=mid+1;i<=end;i++)
b[k++]=a[i];
}
for(int i=0;i<k;i++)
a[begin+i]=b[i];
}
void a_sort (int a[],int begin,int end,int b[])
{
int mid;
if(begin<end){
mid=(begin+end)/2;
a_sort(a,begin,mid,b);
a_sort(a, mid+1, end, b);
a_array(a, begin, mid, end, b);
}
}
int main ()
{
int n,t=1;
while(~scanf("%d",&n)){
ans=0;t=1;t<<=n;
for(int i=0;i<t;i++)
scanf("%d",&a[i]);
a_sort(a, 0, t-1, b);
printf("%d\n",ans);
for(int i=0;i<t;i++)
printf("%d\n",a[i]);
}
return 0;
}

Skewed Sorting的更多相关文章

  1. HDU Cow Sorting (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2838 Cow Sorting Problem Description Sherlock's N (1  ...

  2. 1306. Sorting Algorithm 2016 12 30

    1306. Sorting Algorithm Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description One of the f ...

  3. 算法:POJ1007 DNA sorting

    这题比较简单,重点应该在如何减少循环次数. package practice; import java.io.BufferedInputStream; import java.util.Map; im ...

  4. U3D sorting layer, sort order, order in layer, layer深入辨析

    1,layer是对游戏中所有物体的分类别划分,如UIlayer, waterlayer, 3DModelLayer, smallAssetsLayer, effectLayer等.将不同类的物体划分到 ...

  5. WebGrid with filtering, paging and sorting 【转】

    WebGrid with filtering, paging and sorting by Jose M. Aguilar on April 24, 2012 in Web Development A ...

  6. ASP.NET MVC WebGrid – Performing true AJAX pagination and sorting 【转】

    ASP.NET MVC WebGrid – Performing true AJAX pagination and sorting FEBRUARY 27, 2012 14 COMMENTS WebG ...

  7. poj 1007:DNA Sorting(水题,字符串逆序数排序)

    DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 80832   Accepted: 32533 Des ...

  8. ural 1252. Sorting the Tombstones

    1252. Sorting the Tombstones Time limit: 1.0 secondMemory limit: 64 MB There is time to throw stones ...

  9. CF#335 Sorting Railway Cars

    Sorting Railway Cars time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

随机推荐

  1. JS的一些常见验证代码

    1//檢查空串  2function isEmpty(str){  3 if((str == null)||(str.length == 0)) return (true);  4 else retu ...

  2. 安卓访问webAPI,并取回数据

    前言 安卓自从4.0以后,所有的网络访问都需要异步进程操作.其自带的异步类有AsyncTask,Handler,以及可以声明Thread等等.涉及到多进程,必须要提到一个问题,线程与线程之间不能直接进 ...

  3. Struts文件上传

    首先要加入上传文件需要的jar文件 commons-fileupload-1.2.1.jar commomons-io-1.3.2.jar不同版本的strutsjar文件的版本也可能不同,一般在配置s ...

  4. 【转】ActiveMQ与虚拟通道

    郑重提示,本文转载自http://shift-alt-ctrl.iteye.com/blog/2065436 ActiveMQ提供了虚拟通道的特性(Virtual Destination),它允许一个 ...

  5. NHibernate初步使用

    1.创建一个网站项目:QuickStart 2.引用程序集:NHibernate.dll 3.更改配置文件加入以下节点: <configSections> <section name ...

  6. LeetCode OJ 74. Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  7. HashMap和HashSet的源代码分析

    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 static final float DEFAULT_LOAD_ ...

  8. tableview 代理方法详解

    typedef NS_ENUM(NSInteger, UITableViewCellAccessoryType) { UITableViewCellAccessoryNone, // 不显示任何图标 ...

  9. sha加密算法

    密钥生成 公钥(e,n)  私钥(d,n) 找两个互质的大素数p和q, 计算n=p*p, f(n)=(p-1)*(q-1) 选择随机整数e(e和f(n)互质) de=f(n)mod 1 利用公钥加密 ...

  10. laravel性能优化

    1. 配置信息缓存 使用以下 Artisan 自带命令,把 config 文件夹里所有配置信息合并到一个文件里,减少运行时文件的载入数量: php artisan config:cache 上面命令会 ...