Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Алгоритмы
Курсы ККДП
Дистрибутивы
Ссылки

HotLog


 
Вернуться
Тема: Такая проблема на java: использую для ввода быстрый сканнер c посимвольным чтением строки, но он валится из-за памяти. Та же проблема с памятью, если использовать просто StreamTokenizer. Со встроенным сканнером такой проблемы нет. Почему так получается и как это можно исправить? На Codeforces такой же быстрый сканнер работает без затрат по памяти (но там стоит java 8). Заранее, спасибо.
1
  1  Меньшиков Фёдор Владимирович, 26 июля 2018 г. 17:18:34
      Решения Java с 13 июня перетестированы. Богдан, куча Ваших решений 67-й задачи теперь Accepted.
  2  Яндулов Богдан, 25 июля 2018 г. 21:48:30
      Да, действительно, теперь всё работает адекватно.
  3  Меньшиков Фёдор Владимирович, 25 июля 2018 г. 20:31:06
      Попробуйте ещё раз. Строка запуска изменена.
  4  Меньшиков Фёдор Владимирович, 24 июля 2018 г. 14:33:33
      Сейчас столкнулся с такой же проблемой в другой задаче. Память оказывается больше 16 Мбайт, время больше 0.5 с. Решил, заменив PrintWriter.printf на PrintWriter.println. Возможно printf какие-то библиотеки с собой подтягивает. Полагаю, везде так можно: если использовать только самые простые возможности, то не будет ни TLE, ни MLE.
  5  Яндулов Богдан, 19 июля 2018 г. 14:48:38
      Ну тогда я даже не знаю, что у меня не так.
  6  Меньшиков Фёдор Владимирович, 18 июля 2018 г. 21:15:56
      Я сейчас 10 раз отправил своё решение задачи 67 - попытки 8560737 - 8560746. ВСЕ прошли. Время работы 0.103-0.228, память 2.5-2.8 Мбайт. Во всех случаях размер буфера 2^16.
  7  Демиденко Виталий, 18 июля 2018 г. 15:09:57
      скорее проблема java. такая же история у меня была на тестирующей системе ejudge.
  8  Яндулов Богдан, 18 июля 2018 г. 12:44:20
      Math тут оказался не причём. После того, как в Вашем сканнере изменил размер буфера с 2^10 до 2^8 - прошло за 0.103 с и 3.1 Мб. Поэкспериментировав с буфером, оказалось, что решения с буфером >2^9 получают MLE. А решения с буфером <=2^9 ИНОГДА проходят, а ИНОГДА получают MLE. Например решение 8559106 с буфером 2^9 - MLE (21 Мб), а решение 8559108 c точно таким же кодом - AC с памятью 3.1 Мб. Или решение 8559055 с буфером 2^8 - MLE (29 Мб), а решение 8559059 с ровно таким же кодом - AC c памятью 3,1 Мб. Может быть, проблема с одной из тестирующих систем?
  9  Меньшиков Фёдор Владимирович, 17 июля 2018 г. 22:28:52
      Посмотрел по Вашим ссылкам. Выглядит адекватно. Попробуйте ещё без Math.
  10  Меньшиков Фёдор Владимирович, 17 июля 2018 г. 22:26:18
      В основном решении Вы создаёте какие-нибудь массивы? Я - только массив из не более чем 33 масок. Всё остальное на int'ах.
  11  Яндулов Богдан, 17 июля 2018 г. 20:06:53
      Интересно) В моём решении Ваш сканнер опять-таки падает по памяти (с любым размером буфера). А мой сканнер получил АС на задаче 67 (0.243с и 10Мб памяти) после увеличения буфера с 2^10 до 2^20.
Реализация Вашего сканнера для этой же задачи: https://pastebin.com/wGkcPPsd
И моего: https://pastebin.com/m108GHCe
Можете сказать, откуда берутся затраты по памяти?
  12  Меньшиков Фёдор Владимирович, 17 июля 2018 г. 11:27:56
      Вот с таким сканером https://pastebin.com/Q8nmReN9 я получил Accepted на задаче 67 со временем 0.165 (из 0.4) и памятью 2.5 Мбайт (из 16). Это не совсем стандартный сканер - тут ещё точки считаются пробельными символами.
  13  Яндулов Богдан, 16 июля 2018 г. 21:40:27
      Задача №67.
ID решения: 8554121
Отдельно код сканнера: http://qps.ru/n7dyA
  14  Меньшиков Фёдор Владимирович, 16 июля 2018 г. 21:30:53
      Для обсуждения нужен код быстрого сканера плюс указание задачи, в котором он используется, то есть понимать, какие методы сколько раз вызываются.
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2019, E-mail: admin@acmp.ru