|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
||||||
Сталкер (не проходит по памяти)12.03.2023, 21:34. Показов 5398. Ответов 36
Метки нет (Все метки)
В городе Н при невыясненных обстоятельствах территория одного из заводов превратилась в аномальную зону. Все подъезды к территории были перекрыты, а сама она получила название промзоны. В промзоне находятся N зданий, некоторые из них соединены дорогами. По любой дороге можно перемещаться в обоих направлениях.
Начинающий сталкер получил задание добраться до склада в промзоне. Он нашел в электронном архиве несколько карт территории промзоны. Так как карты составлялись разными людьми, то на каждой из них есть информация только о некоторых дорогах промзоны. Одна и та же дорога может присутствовать на нескольких картах. В пути сталкер может загружать из архива на мобильный телефон по одной карте. При загрузке новой карты предыдущая в памяти телефона не сохраняется. Сталкер может перемещаться лишь по дорогам, отмеченным на карте, загруженной на данный момент. Каждая загрузка карты стоит 1 рубль. Для минимизации расходов сталкеру нужно выбрать такой маршрут, чтобы как можно меньшее число раз загружать карты. Сталкер может загружать одну и ту же карту несколько раз, при этом придется заплатить за каждую загрузку. Изначально в памяти мобильного телефона нет никакой карты. Требуется написать программу, которая вычисляет минимальную сумму расходов, необходимую сталкеру, чтобы добраться от входа в промзону до склада. Формат ввода В первой строке входного файла находятся два натуральных числа N и K (2 ≤ N ≤ 2000; 1 ≤ K ≤ 2000) - количество зданий промзоны и количество карт соответственно. Вход в промзону находится в здании с номером 1, а склад - в здании с номером N. В последующих строках находится информация об имеющихся картах. Первая строка описания i-ой карты содержит число ri - количество дорог, обозначенных на i-ой карте. Затем идут ri строк, содержащие по два натуральных числа a и b (1 ≤ a, b ≤ N; a ≠ b), означающих наличие на i-ой карте дороги, соединяющей здания a и b. Суммарное количество дорог, обозначенных на всех картах, не превышает 300 000 (r1 + r2 + ... + rK ≤ 300 000). Формат выходных данных В выходной файл необходимо вывести одно число - минимальную сумму расходов сталкера. В случае, если до склада добраться невозможно, выведите число -1. Пример. Ввод: 12 4 4 1 6 2 4 7 9 10 12 3 1 4 7 11 3 6 3 2 5 4 11 8 9 5 3 10 10 7 7 2 12 3 5 12 Вывод: 3 Мой алгоритм такой: каждую карту разбиваю на компоненты связности и далее строю граф, где вершиной является номер компонента связности. И далее иду по этому графу обходом в ширину. Так же учитываю, что начало и конец могут быть сразу в нескольких компонентах связности. Мой алгоритм вроде выдает верный ответ, но по памяти все плохо. Что я делаю не так? Мой код:
0
|
||||||
| 12.03.2023, 21:34 | |
|
Ответы с готовыми решениями:
36
помогите оптимизировать программу. Не проходит тест, из-за большого количества используемой памяти. FreeZoneMods Онлайн Сталкер ЧН Вылеты в Сталкер ЗП/Сигероус мод 2.1 |
|
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
|
|
| 13.03.2023, 14:42 | |
|
0
|
|
|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
||
| 13.03.2023, 15:42 [ТС] | ||
|
0
|
||
|
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
|
|
| 13.03.2023, 15:58 | |
|
DarkShaddow, можно собрать словарь - здание: список карт.
По идее, с ограничением списка всех дорог не должно много места в памяти занять Добавлено через 3 минуты Но для питона не знаю, уж больно много он на целое отводит. То есть, если бы я делал задачу на java, то о таких мелочах даже не задумывался бы - там с очень большим запасом проходим и по памяти и по времени, а тут постоянно оглядываться нужно
0
|
|
|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
||||||||
| 13.03.2023, 16:16 [ТС] | ||||||||
|
Red white socks, вроде сделал все, как вы сказали.
Единственное не понял зачем хранить связанные вершины 15 4 5 4 9 3 9 6 2 2 10 11 12 7 1 4 4 7 7 10 6 13 8 13 8 14 13 14 8 1 5 2 13 2 3 5 10 5 11 5 12 11 12 6 13 1 14 15
Кстати, по факту получился объемный граф?
0
|
||||||||
|
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
|
||
| 13.03.2023, 16:22 | ||
|
Добавлено через 3 минуты Вечером посмотрю детально, реализация на беглый взгляд мне не нра. Очереди реализовываться должны через deque, перебирать элементы методом pop() (при переборе элементы очереди из неее уходят). map - оч.плохое имя для переменной
0
|
||
|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
|
| 13.03.2023, 16:28 [ТС] | |
|
понял, подправлю
0
|
|
|
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
|
||
| 13.03.2023, 16:32 | ||
|
Ключевая ошибка, конечно
0
|
||
|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
||||||
| 13.03.2023, 17:39 [ТС] | ||||||
|
Red white socks, подправил все. Теперь 3 тест проходит, но на 7 выдает TL.
0
|
||||||
|
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
|
||||||
| 13.03.2023, 17:56 | ||||||
Сообщение было отмечено DarkShaddow как решение
Решение
DarkShaddow, можешь это попробовать, но скорее всего не пройдет все тесты
Кликните здесь для просмотра всего текста
2
|
||||||
|
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
|
|
| 13.03.2023, 20:00 | |
|
0
|
|
|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
|
| 13.03.2023, 22:22 [ТС] | |
|
ну, теперь могу решать в свое удовольствие ни с кем не соревнуясь)))
1
|
|
|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
|
| 14.03.2023, 11:17 [ТС] | |
|
rRczZZ, все тесты прошли, спасибо. Вот только не пойму, где в моем коде ошибка (тот что я последний кидал). Ну, ладно пойду разбираться.
0
|
|
|
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
|
|||||||||||
| 14.03.2023, 12:24 | |||||||||||
|
DarkShaddow, ну я вот пока на informatics.msk тестирую своё решение, python (мой, который выше) проходит там по памяти и времени все тесты и валится на двух простых (5ом и 6ом) с неправильным ответом.. идея такая:
с++, валится на 5 и 6 с WA
Тогда я убрал поиск компонент связности и закинул все дома со всех карт в граф как вершины, единица только у рёбер из нулевой карты (сток в нулевую карту есть у всех вершин во всех картах). Как и ожидалось - он не проходит по памяти большие тесты (10 и 13, жрёт больше 12 mb), но! 5 и 6 проходит, 300kb 3 ms. с++, правильное решение, валится на 10 и 13 по памяти
Собственно, я написал генератор тестов, и он всё утро ищет тест где первое решение не совпадает со вторым.. пока не нашел. Так что, Ваше решение я еще не особо смотрел (своего то нет), + там же, вроде, Red white socks помогает, но я закинул его на informatics и оно валится по памяти на 15 из 20 тестах, могу предположить, что Вы не победили проблему с квадратичной памятью (её можно решить добавлением промежуточных вершин, нулевой карты в моём случае), о которой я писал выше (с картинкой), но это не точно.
2
|
|||||||||||
|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
|
| 15.03.2023, 10:07 [ТС] | |
|
rRczZZ, понял, но я тестировал не на информатикс, а на яндекс.контест. Там у меня ваше решение на python прошло)
0
|
|
|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
|
| 15.03.2023, 10:11 [ТС] | |
|
все 19 тестов
1
|
|
|
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
|
||
| 16.03.2023, 01:55 | ||
Сообщение было отмечено DarkShaddow как решение
Решение
Победил informatics. В 5 и 6 тестах приходят рёбра в вершины не из отрезка [1,N]. Путей, влияющих на ответ, по ним нет. При чтении карты можно сразу выкидывать такие вершины, и решение проходит все тесты.
Добавлено через 10 минут Только заметил, что ограничение по памяти 256mb. А я тестировал на informatics к 130mb. Тогда, в целом, можно последний код подогнать. В первую очередь нужно убрать set'ы, они очень много жрут, и словари там гдеони не нужны. Но т.к. я не могу тестировать на яндексе, то не буду выкладывать тут код. Фишка в том, что исправленная версия проходит на informatics 18 из 20 тестов, и в худшем случае, по моим замерам (которые не точные скорее всего) ест 170 mb.
3
|
||
|
7 / 7 / 0
Регистрация: 03.10.2020
Сообщений: 164
|
|
| 16.03.2023, 09:02 [ТС] | |
|
rRczZZ, спасибо вам за помощь! Учту ваши советы и попробую переделать
0
|
|
| 16.03.2023, 09:02 | |
|
Помогаю со студенческими работами здесь
37
FreeZoneMods на Лазарусе в Онлайн Сталкер ЧН Не запускается игра Сталкер Чистое небо Долгие загрузки в Сталкер: Зов Припяти Апгрейд для игры в Warfase, Сталкер. Сумасшедший сталкер в Stalker: Тень Чернобыля Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2.
Номеклатура. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|