• Как найти наибольшее значение у такой функции?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Wataru,
    Раз
    61df13bc43005488492055.png
    два"
    61df13c71725c031645860.png
    .

    Я выразил увеличение (защитный слой) по вертикали и горизонтали в зависимости от количества модулей в ряду или колонке, выбираю минимальное из двух. Количество модулей в строке - число, которое я перебираю бинпоиском, остальное выражаю. Оценка бинпоиска - само d. Потом меняю местами a, b (модули повернуты на 90 градусов) и все повторяю.

    В случае, когда слева и справа значения равны я сразу выводил f(mid), но один из тестов ломался. Прописал, что нужно идти влево, решение почти прошло (88 баллов), скопировал метод, прописал что нужно вправо, выбрал лучший - результат не изменился.

    Использовал бинпоиск, оценивал монотонность, запрашивая значения от x+1 и x-1, x - аргумент. Скорее всего, из-за неточной оценки программа и ломается, поэтому и решил спросить, что делать в таких случаях, когда возможен произвольный отрезок (на тестовом случае были ряды нулей, в другом случае может быть как минимум 3 равных значения).
  • Как найти наибольшее значение у такой функции?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Wataru, эту задачу я дорешаю на полный балл, она не должна быть сильно сложной.
  • Как найти наибольшее значение у такой функции?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Спасибо. У меня основная проблема как раз в том, что функция может принимать одинаковые значения на произвольном промежутке, буду искать другое решение.
  • Почему не проходит решение?

    BitNeBolt
    @BitNeBolt Автор вопроса
    dmshar, нет, мне интересно почему это решение не работает, почему эта идея неверна. 19-й тест я упомянул, чтобы показать, что в каких-то случаях оно всё же работает.
  • Почему не получается найти подпоследовательность?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Alexandroppolus, такое решение, кстати, тоже не проходит.
  • Почему не получается найти подпоследовательность?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Alexandroppolus, худший случай, когда решение MN - это когда в а содержится N одинаковых чисел, b = a, l=1, r=N. Оно будет просматривать все N индексов N раз.

    Поэтому MN
  • Почему не получается найти подпоследовательность?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Если что, это виртуальное участие на кф.
  • Почему нет интернета?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Забыл сказать, все оплачено. При подключении кабеля в комп напрямую интернет есть.
  • Как объяснить этот тест в задаче?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Точно! Спасибо.
  • Отзыв на странице гугл плей не виден, что делать?

    BitNeBolt
    @BitNeBolt
    Возможно, они на другом языке, отличном от телефона и его региона.
  • Почему не работает такое решение?

    BitNeBolt
    @BitNeBolt Автор вопроса
    dmshar, сюда я иду не а первую очередь только после того, как сам изучу вопрос и то потому, что нет знакомых, с кем могу обсудить. Код я выкладываю очищенный, без принтов и т.п.
    Некоторые решения выдают неправильный ответ на очевидных тестах или ломаются, когда не должны. Но здесь ошибка может быть в другом: изначально нерабочий алгоритм, нерабочесть которого я не доказал или не понял, поэтому пытаюсь использовать его или же крайний случай, который я не смог понять из-за нехватки опыта и проч.
    К слову, никто кроме пользователей тостера никогда не видел мой код.
    А на форуме вообще никто не заставляет думать над чужим вопросом, особенно если это не что-то интересное, можно пролистнуть мимо, даже лента новостей не засоряется.

    А возможно, мне стоит проявлять больше усидчивости.
  • Почему теряется часть строки? Как этого избежать?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Первый раз оказался в такой ситуации, когда нужно выводить такое количество данных, поэтому и писал соответствующе.
    import java.util.Scanner;
    
    import java.io.OutputStreamWriter;
    import java.io.BufferedWriter;
    
    public class Conditioners {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int q = sc.nextInt();
    
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    		try {
    			for (; q > 0; q--) {
    				int n = sc.nextInt(); int k = sc.nextInt();
    				int[] a = new int[k]; int[] t = new int[k];
    				int[] dp = new int[n+1];
    
    				for (int i = 1; i < n+1; i++)	dp[i] = Integer.MAX_VALUE;
    
    				for (int i = 0; i < k; i++)	a[i] = sc.nextInt();
    				for (int i = 0; i < k; i++) {
    					t[i] = sc.nextInt();
    
    					for (int j = a[i]; j >= 0; j--) {
    						if (dp[j] >= t[i] + Math.abs(a[i] - j))	dp[j] = t[i] + Math.abs(a[i] - j);
    						else									break;
    					}
    
    					for (int j = a[i]; j < n+1; j++) {
    						if (dp[j] >= t[i] + Math.abs(a[i] - j))	dp[j] = t[i] + Math.abs(a[i] - j);
    						else									break;
    					}
    				}
    
    				for (int i = 1; i < n+1; i++)	{ 
    					String s = String.valueOf(dp[i]); 
    					bw.write(s + " ", 0, s.length()+1); 
    				}
    
    				System.out.println("");
    			}
    
    			bw.close();
    		} catch (Exception e) {
    			
    		}
    
    		sc.close();
    	}
    }


    Вообще, мне не нравится весь код в блоке try для этой задачи, когда-нибудь напишу отдельный класс, который будет использоваться только для решения задач, который я буду просто копировать в новый файл.
  • Как решить задачу?

    BitNeBolt
    @BitNeBolt Автор вопроса
    longclaps, спасибо
  • Как решить задачу?

    BitNeBolt
    @BitNeBolt Автор вопроса
    longclaps, ну, почти. Написал решение на жаве, своем основном языке, оно прошло. Ваше решение хоть и выглядит для меня загадочным, но я вроде уловил его суть.

    А под медленной сортировкой я имел ввиду сортировку после каждого добавления элемента последовательности, по крайней мере, я так понял, то, что написано в этом ответе.
  • Как решить задачу?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Суть получается в том, что числа последовательности являются произведениями степеней 2, 3 и 5. Ранее было отвечено, что моя программа генерирует числа, но не первые 10000 последовательности, а просто числа из неё.

    Ваш вариант должен решить эту проблему, так как выполняется сортировка, но из-за неё же, мне кажется, он будет выполняться слишком долго. Вместо сортировки я буду использовать очередь с приоритетом, анализируя наименьший элемент. Почти как в бфс, только берется ближайший сосед.
  • Какой тест не проходит решение?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Wataru, с недавних пор в java появились записи - структуры для хранения нескольких значений. Они могут объявляться в одну строчку (здесь в самомо начале о них кратко говорится https://m.habr.com/ru/post/538800/).

    Если они итак должны использоваться (не иметь же две очереди для каждой координаты), то стоит ли использовать Map для хранения значений или же лучше не лениться и прописать массивы и обращаться к ним по индексам (координаты, хранящиеся в пойнт)? Первое требует гораздо меньше кода.

    На acmp как раз пару дней назад начали использовать 16ую джаву.
  • Какой тест не проходит решение?

    BitNeBolt
    @BitNeBolt Автор вопроса
    Wataru, тут все очень стрёмно: от хранения расстояния до каждого выхода, до использования отдельной структуры для описания вершины, ещё и МАХ в глаза бросается...

    spoiler

    А всё :)
  • Какой тест не проходит решение?

    BitNeBolt
    @BitNeBolt Автор вопроса
    О переполнении задумался от безысходности) до сих пор понять проблему не получалось