550 задача - вычислить маршрут из одной точки в другую на поверхности, испещренной кругами, так чтобы пересечь минимальное количество границ с кругами.

Алгоритм очень прост - если точка отправления находится внутри круга, а точка прибытия не находится в том же круге, или наоборот - то границу круга придется пересечь.
Первоначальный код:
public class CirclesCountry {
public int leastBorders(int[] X, int[] Y, int[] R, int x1, int y1, int x2, int y2) {
int road = 0;
for (int i = 0; i < X.length; i++) {
if (inCircle(x1,y1,X[i],Y[i],R[i])) {
road++;
}else if (inCircle(x2,y2,X[i],Y[i],R[i])) {
road++;
}
}
return road;
}
public boolean inCircle(int x, int y, int cx, int cy, int r) {
double rad = Math.pow(x - cx, 2) + Math.pow(y - cy, 2);
if (rad <= r * r) return true;
return false;
}
}
Засабмитив, нашла в коде ошибку. Если точка отправления и точка назначения находятся в одном круге - количество пересекаемых границ не увеличивается.

Переписала часть:
for (int i = 0; i < X.length; i++) {
if (inCircle(x1,y1,X[i],Y[i],R[i]) && !inCircle(x2,y2,X[i],Y[i],R[i])) {
road++;
}else if (inCircle(x2,y2,X[i],Y[i],R[i]) && !inCircle(x1,y1,X[i],Y[i],R[i])) {
road++;
}
}
или, не зря же в языке есть логические операторы
if (inCircle(x1,y1,X[i],Y[i],R[i]) ^ inCircle(x2,y2,X[i],Y[i],R[i])) {
road++;
}
Сделала тест для челендж фазы, проверила что все тесты включая мой для маршрута внутри концентрических кругов проходят, посмотрела третью задачу, поняла что сконцентрироваться уже не могу, и расслабилась на 20 минут до конца кодинг фазы.
Во время челендж фазы обнаружила что тот код, который я понимаю, пройдет мой тест, а тот который я не понимаю, челенджить не стала.
А вот мой код как-то зачеленджили.
С нетерпением дождалась когда откроются practice rooms, чтоб прогнать код на системных тестах. Тесты все прошли. Как мой код смогли зачеленджить - непонятно. Даже попробовала зачеленджить свой код на граничном условии - когда одна из конечных точек находится на границе круга - нет, такой тест не проходит, все как в условии задачи.
В результате вернулась в комнату контеста, и таки выяснила как удался челендж. За оставшиеся 20 с лишним минут после исправления и тестирования кода я его не засабмитила.
Epic fail.
