Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/47: Рейтинг темы: голосов - 47, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 29.05.2021
Сообщений: 19

Задача Пираты Баренцева моря

29.05.2021, 15:00. Показов 10125. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вася играет в настольную игру «Пираты Баренцева моря», которая посвящена морским битвам. Игровое поле представляет собой квадрат из
N
×
N
клеток, на котором расположено
N
кораблей (каждый корабль занимает одну клетку).
Вася решил воспользоваться линейной тактикой, для этого ему необходимо выстроить все
N
кораблей в одном столбце. За один ход можно передвинуть один корабль в одну из четырёх соседних по стороне клеток. Номер столбца, в котором будут выстроены корабли, не важен. Определите минимальное количество ходов, необходимых для построения кораблей в одном столбце. В начале и процессе игры никакие два корабля не могут находиться в одной клетке.

Формат ввода
В первой строке входных данных задаётся число
N
(1≤N≤100).
В каждой из следующих
N
строк задаются координаты корабля: сначала номер строки, затем номер столбца (нумерация начинается с единицы).

Формат вывода
Выведите одно число — минимальное количество ходов, необходимое для построения.



Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
n = int(input())
mp = [[0 for i in range(n)] for j in range(n)]
points= []
stolb = [0]*n
for i in range(n):
    a, b= list(map(int, input().split()))
    mp[b-1][a-1]=1
    points.append([a-1, b-1])
    stolb[b-1] += 1
if n == 1:
    print(0)
else:
    ch = n
    indmx = 0
    path = 0
    many = []
    mxst = max(stolb)
    for i in range(n):
        if stolb[i] == mxst:
            ind = i
            many.append(i)
 
    mnrsn = n
    if len(many)>1:
        for i in many:
            if abs(i - (n-1)//2) < mnrsn:
                mnrsn = abs(i - n//2)
                print(mnrsn)
                ind = i
    print(ind, many)
    for i in range(n):
        print(mp[i])
    print('')
    for i in range(n):
        x, y = points[i][1], points[i][0]
        mp[x][y] = 0
        y_new = y
        if mp[ind][y_new%n]==1:
            y_new = 0
            while y_new<n and mp[ind][y_new%n]==1:
                y_new += 1
        mp[ind][y_new%n] = 1
        path += abs(x-ind) + abs(y-y_new%n)
    for i in range(n):
        print(mp[i])
    print(path)
но оно на одно из тестов выдает ошибку. подскажите что не так или же напишите пожалуйста решение
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.05.2021, 15:00
Ответы с готовыми решениями:

Пираты Карибского моря 4
будут ли Пираты Карибского моря 4??в сети написано, что будет называтся &quot;в поисках святого Грааля&quot;, а вы встречали где нибудь...

Пираты Карибского моря: На странных берегах
Пираты Карибского моря: На странных берегах Жанр приключения Режиссёр Роб Маршалл Продюсер Джерри Брукхаймер Автор сценария ...

Задача: Известна высота над уровнем моря каждого километра 100-километровой автотрассы.
Всем привет! Вот сама задача: Известна высота над уровнем моря каждого километра 100-километровой автотрассы. Определить, на каком...

31
1 / 1 / 0
Регистрация: 29.05.2021
Сообщений: 19
31.05.2021, 21:21  [ТС]
Студворк — интернет-сервис помощи студентам
Пытался но почему-то теперь не работает
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
31.05.2021, 22:07
Лучший ответ Сообщение было отмечено Igrez_z_z1 как решение

Решение

Python
1
print((lambda n:(lambda ships:(lambda distance:(lambda minsum:min(minsum(j) for j in range(1, n + 1)))(lambda j:sum(distance(i, j, *k.pop()) for k in [ships[:]] for i in range(1, n + 1))))(lambda x1, y1, x2, y2:abs(x1 - x2) + abs(y1 - y2)))(sorted([tuple(map(int, input().split())) for _ in range(n)], reverse=True)))(int(input())))
3
1 / 1 / 0
Регистрация: 29.05.2021
Сообщений: 19
31.05.2021, 22:14  [ТС]
Большое спасибо, решение верное, попробую разобраться в этом решении. У меня есть тред с еще одной задачей, вроде решил правильно но не смог оптимизировать Подскажите пожалуйста с решением задачи
0
 Аватар для Semen-Semenich
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,314
31.05.2021, 22:19

Не по теме:

КулХацкеръ, наконец то дождался ваших однострочников. а то куча вопросов на форуме а вы пропали

0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
31.05.2021, 23:59

Не по теме:

Semen-Semenich, привет :)


Цитата Сообщение от Igrez_z_z1 Посмотреть сообщение
вроде решил правильно но не смог оптимизировать Подскажите пожалуйста с решением задачи
Та же фигня, на файле из 10000 + 10000 слов моя прога отработала за 1.9 секунды (твою программу тоже пробовал, но не дождался результата, вырубил спустя 15 минут).
А тест из 100000 + 100000 слов вообще не стал пробовать.

Добавлено через 4 минуты
Python
1
(lambda dic, n, m:([(lambda s:None if s in dic else (lambda pre, actions:None)(dic.update([(s, s)]), [(lambda t:(lambda action:None)((dic.update([(t, s)]) if s < dic[t] else None) if t in dic else dic.update([(t, s)])))(s[:i] + '?' + s[i + 1:]) for i in range(len(s))]))(input()) for _ in range(n)],[(lambda s:print(dic[s] if s in dic else (lambda onedifs:min(onedifs) if len(onedifs) else '?')(list(map(lambda key:dic[key], filter(lambda t: t in dic, (s[:i] + '?' + s[i + 1:] for i in range(len(s)))))))))(input()) for _ in range(m)]))({}, *map(int, input().split()))
Хочешь - пробуй доработать .
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
01.06.2021, 08:12
Попробовал доработать сам:

Python
1
(lambda d, s, n, m:([(lambda w:(s.add(w), [d.update([(k, min(d[k], w) if k in d else w)]) for k in ((w[:i], w[i+1:]) for i in range(len(w)))]))(input()) for _ in range(n)],[print((lambda w:w if w in s else (lambda r:min(r) if len(r) else '?')([d[k] for k in ((w[:i], w[i+1:]) for i in range(len(s))) if k in d]))(input())) for _ in range(m)]))({}, set(), *map(int, input().split()))
Теперь время работы ~1.2 с (было ~1.9 с) на файле 10000 + 10000 слов.
0
1 / 1 / 0
Регистрация: 29.05.2021
Сообщений: 19
01.06.2021, 12:06  [ТС]
На этом выдает WrongAnswer
1
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
01.06.2021, 12:34
Цитата Сообщение от Igrez_z_z1 Посмотреть сообщение
На этом выдает WrongAnswer
Да, спасибо. Исправил:

Python
1
(lambda d, s, n, m:([(lambda w:(s.add(w), [d.update([(k, min(d[k], w) if k in d else w)]) for k in ((w[:i], w[i+1:]) for i in range(len(w)))]))(input()) for _ in range(n)], [print((lambda w:w if w in s else (lambda r:min(r) if len(r) else '?')([d[k] for k in ((w[:i], w[i+1:]) for i in range(len(w))) if k in d]))(input())) for _ in range(m)]))({}, set(), *map(int, input().split()))
1
01.06.2021, 13:45

Не по теме:

КулХацкеръ, не думал написать транслятор из "обычного" Python кода в однострочный Python код из lambda и прочих "прелестей"?))

0
01.06.2021, 13:53

Не по теме:

Arsegg, ага, уже подумываю над этим :). Иногда на перевод в однострочник уходит больше времени, чем на написание первоначальной программы.

0
1 / 1 / 0
Регистрация: 29.05.2021
Сообщений: 19
01.06.2021, 13:56  [ТС]
Там ограничение в секунду, мои решения тоже не проходили, а у вашего пишет 1.088)))) Хэш чтоли надо использовать. Ужасно сложная задача из-за ограничений
0
1 / 1 / 0
Регистрация: 29.05.2021
Сообщений: 19
03.06.2021, 16:22  [ТС]
На шахматной доске n × n находятся m ферзей (ферзь бьет клетки на той же горизонтали, вертикали, или диагонали до ближайшей занятой). Определите, сколько пар ферзей бьют друг друга.
Ограничение времени 2 секунды
Ограничение памяти 256Mb

Формат ввода:
В первой строке находятся два целых числа n и m (1 ≤ n ≤ 109, 0 ≤ m ≤ 2 ⋅ 105), в каждой из следующих m строк находится пара целых чисел x, y (1 ≤ x, y ≤ n) — координаты очередного ферзя. Гарантируется, что все ферзи стоят в различных клетках поля.
Формат вывода
Выведите одно число — количество пар ферзей, которые бьют друг друга.

Не подскажите как такое решить, все мои решения по времени не укладываются((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.06.2021, 16:22

Пираты
Однажды на рассвете, когда мы после долгого плавания шли между Канарскими островами и Африкой, на нас напали пираты – морские разбойники....

Пираты
Однажды на рассвете, когда мы после долгого плавания шли между Канарскими островами и Африкой, на нас напали пираты – морские разбойники....

Пираты силиконовой долины
Кто нибудь смотрел, можно узнать ваше мнение?

Половина пользователей Рунета — иностранные пираты
По данным исследовательской компании SpyLog, количество любителей пиратского контента из-за рубежа в настоящий момент составляет около 52%...

Как шведские пираты разобрались с Electronic Arts
Компания Electronic Arts потребовала прекратить функционирование шведского сайта Pirate Bay, являющегося одним из крупнейших ресурсов,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru