Каждый год корова провести мероприятие с участием своеобразной версии классиков , которая включает в себя тщательно прыгать с камня на камень в реке. Возбуждение происходит на длинной прямой реке с камнем в начале и другой породы в конце, L единиц расстояние от начала (1 ≤ L ≤ 1 млрд). Вдоль реки между начальной и конечными породами, N (0 ≤ N ≤ 50000) появляется более порода, каждый на интегральном расстоянии D я с самого начала (0 < D я < L ).
Для того, чтобы играть в игру, каждая корова в свою очередь, начинается с начальной скалы и пытается добраться до финиша в финале скалы, прыжки только с камня на камень. Конечно, менее проворные коровы никогда не делают его окончательного рок, в конечном итоге вместо того, чтобы в реке.
Фермер Джон гордится своими коровами и часы это событие каждый год. Но , как проходит время, он устает смотреть робкие коров других фермеров хромать через короткие расстояния между скал , расположенных слишком близко друг к другу. Он планирует снять несколько пород с целью повышения кратчайшего расстояния коровы придется прыгать , чтобы дойти до конца. Он знает , что он не может удалить начальный и конечные скалы, но он рассчитывает , что он имеет достаточно ресурсов , чтобы удалить до М пород (0 ≤ M ≤ N ).
FJ хочет точно знать , сколько он может увеличить кратчайшее расстояние * до * он начинает извлекать камни. Помощь Farmer John определить максимально возможное кратчайшее расстояние коровы имеет прыгать после удаления оптимального набора М пород.
Линия 2 .. N + 1: Каждая строка содержит одно целое число , указывающее , насколько далеко некоторые породы находятся далека от исходной породы. Никакие две породы не разделяют ту же позицию.
5 2 25 2 14 11 21 17Пример вывода
4намек
OJ-ID:
POJ-3258
Автор:
Caution_X
Дата представления:
20,191,017
Тэгов:
бинарное
моделирование Описания:
река с м камнем, каждый камень положение [я] (а [0 ] = 0, а [т +-] = п // п длина реки), извлекали из K камней, чтобы максимизировать минимальное значение между двумя камнями
Основные шаги , чтобы решить эту проблему:
1. перечислить половину минимального расстояния между камнями, чтобы достичь этой минимальной статистики количество камней , необходимых для удаления значения
2. Если число камней <= к, все это минимальное расстояние может быть больше, в противном случае объяснить это минимальное расстояние слишком большие
предупреждения:
не означает , что это минимальное расстояние , когда количество камней == к оптимальному решение
код AC:
#include <iostream> #include <алгоритм> с помощью пространства имен STD; Int а [ 50005 ]; INT основных () { INT п, т, к; CIN >> п >> т >> к; а [ 0 ] = 0 ; а [т + 1 ] = N; INT L = N; для ( INT I = 1 ; я <= т; я ++ ) { CIN >> а [I]; L = мин (л, а [я] -a [i - 1 ]); } л= мин (л, а [М + 1 ] - а [м]); INT R = N; рода (а, а + M + 2 ); в то время как (L <= R) { INT среднего = (L + R) / 2 ; INT сумма = 0 , Delet = 0 ; для ( INT I = 1 ; г <= т + 1 ;) { сумма + = а [я] -a [i - 1 ]; если (сумма <= середина) { я ++ ; Delet ++ ; } еще { я ++ ; сумма = 0 ; } } Если (Delet <= к) { L = середина + 1 ; } Иначе { R = середина 1 ; } } СоиЬ << L << епсИ; вернуться 0 ; }