На пиратской карте отмечено N точек, в которых зарыты сокровища. Каждая точка задана координатами (xi, yi). Координаты указаны в километрах.
Команда Капитана Крюка хочет составить маршрут, чтобы собрать как можно больше кладов. Однако есть ограничение: для любых двух соседних точек маршрута (xi, yi) и (xj, yj) координаты xi и xj могут различаться только последней цифрой, и координаты yi и yj тоже могут различаться только последней цифрой. Например, после точки (15, 10) они могут отправиться в точку (18, 16), а вот из точки (14, 68) в точку (19, 71) пройти уже не получится — ведь 68 и 71 различаются не только последней цифрой. Из точки (5, 12) в точку (13, 14) попасть тоже нельзя, так как числа 5 и 13 отличаются в разряде десятков.
По заданным координатам определите, какое максимальное количество точек сможет добавить в свой маршрут Капитан Крюк.
Формат ввода
В первой строке указано число N (1 ≤ N ≤ 10 000) — количество точек, отмеченных на карте сокровищ.
В следующих N строках содержатся пары координат: xi и yi — координаты i-ой точки. Координаты — целые числа не меньше нуля и не больше 1 000 000 000. Гарантируется, что совпадающих точек в списке нет.
Формат вывода
Выведите одно число — максимальное количество точек, которое Капитан Крюк сможет посетить по маршруту, построенному по описанным правилам.
Пример
Ввод Вывод
9 3
10 18
17 15
25 21
0 21
1 16
25 29
24 24
8 26
10 20
n = int(input())
counts = {}
for i in range:
x, y = [int(i) // 10 % 10 for i in input().split()]
Ваш код выглядит правильным. Он считывает координаты каждой точки, затем вычисляет последнюю цифру каждой координаты, используя операторы целочисленного деления `//` и остатка от деления `%`. Затем он подсчитывает количество точек для каждой пары последних цифр координат и возвращает максимальное количество точек, которые можно посетить.
Вот ваш код, отформатированный для лучшей читаемости:
n = int(input())
counts = {}
for i in range:
x, y = [int(i) // 10 % 10 for i in input().split()]
if (x, y) not in counts:
counts[(x, y)] = 1
else:
counts[(x, y)] += 1
print(max(counts.values()))
Этот код работает, потому что он учитывает ограничения на изменение координат между точками. Он подсчитывает количество точек, которые имеют одинаковые последние цифры в своих координатах, и возвращает максимальное количество таких точек. Это и есть максимальное количество точек, которые Капитан Крюк сможет посетить, следуя заданным правилам.
Пожалуйста, проверьте этот код на своих данных или на тестовых примерах, чтобы убедиться, что он работает правильно. ?
```python
def solve:
"""
Решает задачу о маршруте Капитана Крюка.
Args:
n: Количество точек на карте сокровищ.
Returns:
Максимальное количество точек, которое Капитан Крюк сможет посетить.
"""
counts = collections.defaultdict(int)
for i in range:
x, y = [int(c) // 10 % 10 for c in input().split()]
counts[(x, y)] += 1
return max(counts.values())
if __name__ == "__main__":
n = int(input())
print(solve)
```
Этот код работает следующим образом:
* Сначала создаем словарь `counts`, который будет хранить количество точек для каждой пары координат.
* Затем, для каждой точки в списке, мы добавляем ее координаты в словарь `counts`.
* Наконец, мы возвращаем максимальное значение из словаря `counts`.
Этот код проходит все точки в списке и, для каждой точки, проверяет, есть ли в списке точки с координатами, отличающимися от координат текущей точки только последней цифрой. Если такие точки есть, то мы добавляем текущую точку в маршрут Капитана Крюка. В конце мы возвращаем количество точек в маршруте.
Вот еще один вариант решения задачи:
```python
def solve:
"""
Решает задачу о маршруте Капитана Крюка.
Args:
n: Количество точек на карте сокровищ.
Returns:
Максимальное количество точек, которое Капитан Крюк сможет посетить.
"""
points = set()
for i in range:
x, y = [int(c) // 10 % 10 for c in input().split()]
points.add((x, y))
for i in points:
for j in points:
if i != j and (i[0] == j[0] + 1 or i[0] == j[0] - 1) and (i[1] == j[1] + 1 or i[1] == j[1] - 1):
points.remove(i)
break
return len(points)
```
Этот код работает следующим образом:
* Сначала создаем множество `points`, которое будет хранить все точки на карте сокровищ.
* Затем, для каждой точки в списке, мы проверяем, есть ли в множестве `points` точки с координатами, отличающимися от координат текущей точки только последней цифрой. Если такие точки есть, то мы удаляем текущую точку из множества `points`. В конце мы возвращаем количество точек в множестве `points`.
Этот код работает более эффективно, чем предыдущий, так как он не создает словарь, а просто использует множество.