Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.Arrays;
- class Main
- {
- static StreamTokenizer st;
- static int get() throws IOException
- {
- st.nextToken();
- return (int)st.nval;
- }
- public static void main(String[] args) throws IOException
- {
- st = new StreamTokenizer(new FileReader("input.txt"));
- int n = get();
- int [] mas = new int[n];
- // вводим данные
- for(int g = 0; g < n; g++)
- {
- mas[g] = get();
- }
- //массивчик для восстановления порядка чисел в конце
- int mas1[] = new int[n];
- System.arraycopy(mas, 0, mas1, 0, n);
- // сортируем исходный массив
- Arrays.sort(mas);
- // номер нужно элемента в массиве. точнее один из номеров
- int index = n - 1;
- // текущая и максимальная длина последовательности
- int k = 1; int kmax = 1;
- // идем с конда для того, чтобы найти минимальный элемент с максимальным количеством
- for(int i = n - 1 ; i > 0; i--)
- {
- // если последовательность продолжилась наращиваем текущую длину
- if(mas[i] == mas[i-1])
- {
- k++;
- }
- else // иначе проверяем на максимум и запоминаем место, где она закончилась
- {
- if(k >= kmax)
- {
- kmax = k;
- index = i;
- }
- // снова в единичной последовательности
- k = 1;
- }
- }
- // проверка конца, потому что можем последнюю последовательность не учесть
- if(k >= kmax)
- {
- kmax = k;
- index = 0;
- }
- // запоминаем элемент, который нужно запихнуть в концец списка
- int number = mas[index];
- int i = 0;
- int t = 0;
- // заполняем пока что элементами, которые не равны найденному.
- while(i < n && t < n)
- {
- if(mas1[i] == number)
- {
- while(mas1[i] == number && i < n-1)
- i++;
- mas[t] = mas1[i];
- i++;
- }
- else
- {
- mas[t] = mas1[i];
- i++;
- }
- t++;
- }
- // заполняем оставшиеся ячейки найденным номером.
- for(int g = n - kmax; g < n; g++)
- mas[g] = number;
- // собственно все. вывод.
- FileWriter bw = new FileWriter("output.txt");
- for(int g = 0; g < n; g++)
- bw.write(mas[g] + " ");
- bw.close();
- }
- }
Add Comment
Please, Sign In to add comment