Skewed Sorting
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的更多相关文章
- HDU Cow Sorting (树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2838 Cow Sorting Problem Description Sherlock's N (1 ...
- 1306. Sorting Algorithm 2016 12 30
1306. Sorting Algorithm Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description One of the f ...
- 算法:POJ1007 DNA sorting
这题比较简单,重点应该在如何减少循环次数. package practice; import java.io.BufferedInputStream; import java.util.Map; im ...
- U3D sorting layer, sort order, order in layer, layer深入辨析
1,layer是对游戏中所有物体的分类别划分,如UIlayer, waterlayer, 3DModelLayer, smallAssetsLayer, effectLayer等.将不同类的物体划分到 ...
- WebGrid with filtering, paging and sorting 【转】
WebGrid with filtering, paging and sorting by Jose M. Aguilar on April 24, 2012 in Web Development A ...
- 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 ...
- poj 1007:DNA Sorting(水题,字符串逆序数排序)
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 80832 Accepted: 32533 Des ...
- ural 1252. Sorting the Tombstones
1252. Sorting the Tombstones Time limit: 1.0 secondMemory limit: 64 MB There is time to throw stones ...
- CF#335 Sorting Railway Cars
Sorting Railway Cars time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
随机推荐
- json_encode转成带 花括号的{ } 和 中括号的[ ] 2种 形式 json数据
//提交多个出差人员 .命名为数组 name="apply_members[] " //php接收到数据 为 数组 $aa = array('0'=>11,'1'=> ...
- sql新建数据库表,及添加多个主键
create table tb_Modules(module_Id int identity(1,1) primary key, (自增)model_Name varchar(50) not nul ...
- informix建临时表索引
对于特殊字段,比如外键,主键,在不知道外键主键名的情况下,需要如下操作select constrname from sysconstraints where constrtype='R' and ta ...
- poj 2299 Ultra-QuickSort 逆序对模版题
用树状数组求逆序数 唯一的坑点就是sum要用long long存 直接贴代码了 以后忘了还能直接看 2333…… PS:和hdu3743代码是一样的,因为两个都是逆序对模版题…… #include&l ...
- digitalocean注册验证账户、激活账号教程
注册digitalocean账号很简单,使用优惠链接注册digitalocean还能赠送10美元余额,digitalocean vps是优秀的SSD VPS,最便宜的套餐只要5美元/月. 由于中国大陆 ...
- DIV层漂浮居中
<style type="text/css" title="currentStyle" media="screen" mce_bogu ...
- text绑定(The "text" binding)
目的 text绑定可以使你传递的参数做为文本显示到相关的DOM元素里. 一般会用在如<span>或者<em>这类元素来显示文本,但从技术来讲它可以绑定到任何元素. 示例 Tod ...
- hdu 5524 二叉树找规律,二进制相关
input n 1<=n<=1e18 output 有n个结点的满二叉树有多少个不相同结点数的子树 做法:树有h=log2(n)层,最多有2h-2种(1除外),然后再n减去u重复的即可 # ...
- UIDynamic物理仿真
UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象, 比如重力.弹性碰撞等现象,UIKit动力具有可组合.可重用和声明式 ...
- Quartz任务调度器及与Spring的整合使用
参考 点击打开链接