光荣的梦想
Time Limit:10000MS Memory Limit:65536K
Total Submit:110 Accepted:45
Description
Prince对他在这片大陆上维护的秩序感到满意,于是决定启程离开艾泽拉斯。在他动身之前,Prince决定赋予King_Bette最强大的能量以守护世界、保卫这里的平衡与和谐。在那个时代,平衡是个梦想。因为有很多奇异的物种拥有各种不稳定的能量,平衡瞬间即被打破。KB决定求助于你,帮助他完成这个梦想。
一串数列即表示一个世界的状态。
平衡是指这串数列以升序排列。而从一串无序数列到有序数列需要通过交换数列中的元素来实现。KB的能量只能交换相邻两个数字。他想知道他最少需要交换几次就能使数列有序。
Input
第一行为数据的组数N。对于每组数据,第一行为数列中数的个数n,第二行为n <= 10000个数。表示当前数列的状态。
Output
输出一个整数,表示最少需要交换几次能达到平衡状态。
Sample Input
4
2 1 4 3
Sample Output
2
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class guangrongdemengxiang {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(),mid = 0,sum=0;
int [] num = new int [n];
for (int i = 0; i < num.length; i++) {
num[i]=sc.nextInt();
list.add(num[i]);
}
Arrays.sort(num);
for (int i = 0; i < num.length; i++) {
if(num[i]==list.get(i)) continue;
for (int start = 0,end=num.length-1;;) {
mid=(start+end)/2;
if(num[mid]<list.get(i)){
if(mid==start){
start=end;
continue;
}
start=mid;
end=num.length-1;
}
else if(num[mid]>list.get(i)){
start=0;
end=mid;
}
else{
int temp = list.remove(i);
list.add(mid, temp);
sum+=Math.abs(mid-i);
break;
}
}
}
System.out.println(sum);
}
}