Guest User

Untitled

a guest
Jul 22nd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.19 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.Arrays;
  3. class Main
  4. {
  5.     static StreamTokenizer st;
  6.     static int get() throws IOException
  7.     {
  8.         st.nextToken();
  9.         return (int)st.nval;
  10.     }
  11.     public static void main(String[] args) throws IOException
  12.     {
  13.         st = new StreamTokenizer(new FileReader("input.txt"));
  14.         int n = get();
  15.         int [] mas = new int[n];
  16.         // вводим данные
  17.         for(int g = 0; g < n; g++)
  18.         {
  19.             mas[g] = get();
  20.         }
  21.         //массивчик для восстановления порядка чисел в конце
  22.         int mas1[] = new int[n];
  23.         System.arraycopy(mas, 0, mas1, 0, n);
  24.         // сортируем исходный массив
  25.         Arrays.sort(mas);
  26.         // номер нужно элемента в массиве. точнее один из номеров
  27.         int index = n - 1;
  28.         // текущая и максимальная длина последовательности
  29.         int k = 1; int kmax = 1;
  30.         // идем с конда для того, чтобы найти минимальный элемент с максимальным количеством
  31.         for(int i = n - 1 ; i > 0; i--)
  32.         {
  33.             // если последовательность продолжилась наращиваем текущую длину
  34.             if(mas[i] == mas[i-1])
  35.             {
  36.                 k++;
  37.             }
  38.             else // иначе проверяем на максимум и запоминаем место, где она закончилась
  39.             {
  40.                 if(k >= kmax)
  41.                 {
  42.                     kmax = k;
  43.                     index = i;
  44.                 }      
  45.                 // снова в единичной последовательности
  46.                 k = 1;
  47.             }
  48.         }
  49.         // проверка конца, потому что можем последнюю последовательность не учесть
  50.         if(k >= kmax)
  51.         {
  52.             kmax = k;
  53.             index = 0;
  54.         }
  55.         // запоминаем элемент, который нужно запихнуть в концец списка
  56.         int number = mas[index];
  57.         int i = 0;
  58.         int t = 0;
  59.         // заполняем пока что элементами, которые не равны найденному.
  60.         while(i < n && t < n)
  61.         {
  62.             if(mas1[i] == number)
  63.             {
  64.                 while(mas1[i] == number && i < n-1)
  65.                     i++;
  66.                 mas[t] = mas1[i];
  67.                 i++;
  68.             }
  69.             else
  70.             {
  71.                 mas[t] = mas1[i];
  72.                 i++;
  73.             }
  74.             t++;
  75.         }
  76.         // заполняем оставшиеся ячейки найденным номером.
  77.         for(int g = n - kmax; g < n; g++)
  78.             mas[g] = number;
  79.         // собственно все. вывод.
  80.         FileWriter bw = new FileWriter("output.txt");
  81.         for(int g = 0; g < n; g++)
  82.             bw.write(mas[g] + " ");
  83.         bw.close();
  84.     }
  85. }
Add Comment
Please, Sign In to add comment