Почему Яндекс Контест выдаёт runtime-error при проверке задачи на Java
Задача:
Вася и Маша участвуют в субботнике и красят стволы деревьев в белый цвет. Деревья растут вдоль улицы через равные промежутки в 1 метр. Одно из деревьев обозначено числом ноль, деревья по одну сторону занумерованы положительными числами 1 , 2 и т.д., а в другую — отрицательными − 1 , − 2 и т.д. Ведро с краской для Васи установили возле дерева P , а для Маши — возле дерева Q . Ведра с краской очень тяжелые и Вася с Машей не могут их переставить, поэтому они окунают кисть в ведро и уже с этой кистью идут красить дерево. Краска на кисти из ведра Васи засыхает, когда он удаляется от ведра более чем на V метров, а из ведра Маши — на M метров. Определите, сколько деревьев может быть покрашено.
Формат ввода
В первой строке содержится два целых числа P и V — номер дерева, у которого стоит ведро Васи и на сколько деревьев он может от него удаляться. В второй строке содержится два целых числа Q и M — аналогичные данные для Маши. Все числа целые и по модулю не превосходят 1 0 8 .
Формат вывода
Выведите одно число — количество деревьев, которые могут быть покрашены.
Пример
Ввод
0 7
12 5
Вывод
25
Моё решение выдаёт runtime-error
в яндекс контесте, несмотря на то, что локально всё работает прекрасно (это все данные об ошибке, которые я могу получить от яндекса):
Моё решение:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* A
*/
public class A {
private static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
List<List<Integer>> ranges = new ArrayList<>();
for (int i = 0; i < 2; i++) {
int[] input = processInput();
List<Integer> range = findRange(input[0], input[1]);
ranges.add(range);
}
List<Integer> vRange = ranges.get(0);
List<Integer> mRange = ranges.get(1);
writer.write(String.valueOf(getAmountOfTrees(vRange, mRange)));
writer.flush();
}
public static int getAmountOfTrees(List<Integer> l1, List<Integer> l2) {
List<Integer> intersection = getIntersection(l1, l2);
boolean areListsEqual = checkIfTwoListsEqual(l1, l2);
if (intersection.size() == 0) {
return l1.size() + l2.size();
} else if (areListsEqual) {
return l2.size();
} else if (areListsEqual) {
return l1.size();
}
List<Integer> alteredlist = removeIntersection(l1, l2, intersection);
return alteredlist.size() + intersection.size();
}
public static List<Integer> findRange(int a, int b) {
int start = a - b;
int end = a + b;
List<Integer> range = new ArrayList<>();
for (int i = start; i <= end; i++) {
range.add(i);
}
return range;
}
public static int[] processInput() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String input = reader.readLine();
return Arrays.stream(input.split(" "))
.mapToInt(Integer::parseInt)
.toArray();
}
public static boolean isFirstListGreaterThanSecond(List<Integer> l1, List<Integer> l2) {
return l1.size() > l2.size() ? true : false;
}
public static List<Integer> removeIntersection(List<Integer> l1, List<Integer> l2, List<Integer> intersection) {
for (int i : intersection) {
int indexl1 = l1.indexOf(i);
int indexl2 = l2.indexOf(i);
l1.remove(indexl1);
l2.remove(indexl2);
}
l1.addAll(l2);
l1.sort((Integer i1, Integer i2) -> i1 - i2);
return l1;
}
public static List<Integer> getIntersection(List<Integer> l1, List<Integer> l2) {
List<Integer> intersection = new ArrayList<>();
for (int i1 : l1) {
for (int i2 : l2) {
if (i1 == i2) {
intersection.add(i1);
}
}
}
return intersection;
}
public static boolean checkIfTwoListsEqual(List<Integer> l1, List<Integer> l2) {
if (l1.size() != l2.size()) {
return false;
}
return l1.equals(l2);
}
}
Версия jdk: jdk-21
.
Помогите, пожалуйста, никак не могу понять в чём ошибка.