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. linux screen命令简易使用

    在Screen环境下,所有的会话都独立的运行,并拥有各自的编号.输入.输出和窗口缓存,方便在linux系统中后台执行程序. 安装,以centos为例: yum -y install screen 新建 ...

  2. JavaScript原生对象总纲

    一. javascript之Array类 创建js数组两种方式: var arr = [];  或var arr = new Array(); ()里可以指定长度,也可以不指定,指不指定都无所谓,因为 ...

  3. 二维小波包分解wpdec2

    load woman; %小波包2尺度(层)分解 t=wpdec2(X,2,'haar'); plot(t);%绘制小波包树 %提取(1,2)处结点.也可以点击上图结点,观察 c12=wpcoef(t ...

  4. Delphi用ADOquery主从表例子(转总结)

    http://blog.csdn.net/kandy_zheng/article/details/1639184 在sql server 的northwide 中建立主表 create table s ...

  5. ESFramework 通信框架安全机制的设计与实现

    在分布式通信系统中,安全无疑是非常重要的.ESFramework通信框架提供了哪些安全保障了?由于ESFramework通信框架是应用层的开发框架,那么本文我们只讨论ESFramework通信框架在应 ...

  6. 配置nginx为HTTPS服务器

    默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这 ...

  7. javascript焦点图(根据图片下方的小框自动播放)

    html和css就不详细说明了,也是简单布局,通过定位把跟随图片的小框,定位到图片下方 <!DOCTYPE html> <html> <head> <meta ...

  8. 查找一个数组中最小的前n项

    /****************************************************************** find the biggest x number in a s ...

  9. hudson

    来源: hudson入门与实战 http://www.360doc.com/content/15/0304/22/12144668_452603921.shtml Hudson安装配置.部署应用及分析 ...

  10. 利用Ajax实现前端与.net后端实现数据交互

    使用场景和需求:用户在地址栏输入请求地址,先.net服务器发送页面请求,该页面包含Echart图表,在页面中向.net后端发送数据请求,获取数据后,将数据填充到Echart图表中.其中包含带参与不带参 ...