排队

来源:互联网 发布:bioeffect蓓欧菲 知乎 编辑:程序博客网 时间:2024/05/01 18:58

import java.util.Scanner;
public class paidui{
 static int n;
 static int[] s;
 static int bugaoxing = 99999;
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  n = sc.nextInt();
  s = new int[n];
  int[][] count = new int[n][2];

  for (int i = 0; i < n; i++) {
   s[i] = sc.nextInt();
   count[i][0] = 0;
   count[i][1] = 0;
  }

  int all = exchange(findMin(count), count);

  System.out.println(all);


 }


 static int exchange(int k, int[][] count) {
  if (isOk()) {
   int temp = sum(count);
   if (temp < bugaoxing)
    bugaoxing = temp;
   return temp;
  }

  else {

   exchangeAll(count, k);

   return exchange(findMin(count), count);
  }
 }


 static int findMin(int[][] count) {
  int[] temp = new int[n];
  for (int i = 0; i < n; i++) {
   temp[i] = count[i][1];
  }

  for (int i = 0; i < n; i++) {
   int min = i;
   for (int j = i + 1; j < n; j++) {
    if (temp[min] > temp[j])
     min = j;
   }
   temp[min] = temp[i];   
   if (min < n - 1 && s[min] > s[min + 1])
    return min;   
  }
  return n - 2;
 }


 static void exchangeAll(int[][] count, int k) {
  int temp;
  temp = s[k + 1];
  s[k + 1] = s[k];
  s[k] = temp;

  count[k][1]++;
  count[k][0] = count[k][0] + count[k][1];

  count[k + 1][1]++;
  count[k + 1][0] = count[k + 1][0] + count[k + 1][1];

  int[] temp1 = count[k];
  count[k] = count[k + 1];
  count[k + 1] = temp1;
 }

 static boolean isOk() {
  for (int i = 0; i < n; i++) {
   for (int j = i + 1; j < n; j++) {
    if (s[j] < s[i])
     return false;
   }
  }
  return true;
 }


 static int sum(int[][] count) {
  int temp = 0;
  for (int i = 0; i < n; i++)
   temp += count[i][0];
  return temp;
 }

}

 

0 0
原创粉丝点击