Блог пользователя Sinner

Автор Sinner, 12 лет назад, По-русски

Собственно, только что закончился третий раунд SNWS 2014. Хотелось бы узнать 2 вещи:

1) Можно ли как-нибудь решить E без использования длинной арифметики?

2) Кто-нибудь может объяснить вот это? Всегда думал, что Java 7 x32 самая быстрая, а тут наоборот оказалось.

  • Проголосовать: нравится
  • +25
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +26 Проголосовать: не нравится

я Е сдал double-ами на С++

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Странно, ведь третий тест, кажется, не самый большой.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится

Объясните мне, пожалуйста, вот это:

Два пользователя считаются знакомыми, если существует 24-часовой период времени, в течение которого каждый из них инициировал звонок другому. Например, если в 6 утра 1 апреля пользователь A позвонил пользователю B и звонок длился 20 минут, а в 6:20 утра 2 апреля пользователь B позвонил пользователю A и звонок длился 1 минуту, то эти пользователи считаются знакомыми.

Какой тут 24-часовой период в примере? Во-первых, по моей арифметике разница между "инициированием" звонков в примере — 24 часа и 20 минут. Во-вторых, даже если считать, что мы учитываем время "на линии", а не только время начала звонка, то у меня получается, что первый звонок был с 6:00 до 6:19 (включительно), а второй начался через день в 6:20, то есть все равно получается получается больше чем 24-часовой интервал.

Я вижу, как тут можно подогнать понимание под пример, но как то же самое понять просто из условия я не понимаю.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Мои два понимания условия были точно такими же.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    По-моему всё ок, если считать, что звонок начинается ровно в момент начала минуты и заканчивается в момент конца последней минуты, что есть момент начала новой минуты. Первый звонок закончился в конце 6:19, что есть начало 6:20, а второй начался в 6:20. Берём 24х часовой интервал и получаем, что у этого интервала есть пересечение с каждым из временных интервалов по одной точке.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Как решать F?

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится

    Динамикой по парам префиксов за |A|n^2. Я сам не стал это писать, но идея в том, что нужно для каждой буквы хранить все возможные пары совпадающих подпоследовательностей, умноженных на количество встреч данной буквы после них.

»
12 лет назад, скрыть # |
Rev. 6  
Проголосовать: нравится +145 Проголосовать: не нравится

Пользуясь случаем, скажу, какие ужасные условия на SNWS 2014. Уже третий раунд ужасные условия. Если ты слышишь меня Олег, сделай что-нибудь, чтобы таких условий больше не было. Я потратил кучу времени, разглядывая самплы задачи A, чтобы хоть что-то понять. Тоже самое с задачей E. Каждый раунд такое. Читаешь задачу, вникаешь в условие минут 10, иногда даже самплы ничего не дают (как в задаче, кажется, Д раунда 2).

Я, конечно, наверняка, слишком субъективен. Но у меня желание писать SNWS пропадает от таких условий. Не удовольствие от задач, а недовольство от чтения условий только лишь одно. Ума не приложу, как другие участники понимают быстро, что просят в задаче. Надеюсь, этот комментарий хоть на что-нибудь повлияет.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +27 Проголосовать: не нравится

    Это видно невооруженным глазом. Я уже говорил о том, что кажется, что это делается специально, с целью усложнить контест...

    • »
      »
      »
      12 лет назад, скрыть # ^ |
      Rev. 2  
      Проголосовать: нравится +8 Проголосовать: не нравится

      Весьма странная причина, я предлагаю дождаться каких-нибудь комментариев Олега. Все-таки мой комментарий набрал уже +58, наверняка, это большая (ударение на А) доля участников SNWS.

      У меня было предположение, что условия задач редактирует (или переводит, не знаю откуда там берутся задачи) какой-нибудь не очень опытный в олимпиадах участник. Возможно, это сам Олег, может кто-то другой. Должно же быть логичное объяснение, почему условия стали такие плохие. Я участвовал в прошлом году, вроде, даже в позапрошлом, возможно, я надумываю, но таких плохих условий как в этом году я не видел. Если мое предположение является правдой, я готов после раунда оставлять feedback тому человеку, который работает с условиями, чтобы они стали лучше. Это весьма не просто — написать понятное условие. Я хорошо это знаю, потому что часто редактирую условия авторов Codeforces, и не всегда у меня получается это удачно сделать, несмотря на то, что раундов уже приготовил больше сотни.

      Ждем официальных комментариев. Кстати, кто-нибудь пробовал задавать вопросы в систему? Это работает? Я нажимал несколько раз на кнопку, чтобы посмотреть ответы на вопросы, которые уже задавали, но таковых не было. Значит, что все всё понимали и вопросов не задавали?

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
        Rev. 2  
        Проголосовать: нравится -20 Проголосовать: не нравится

        Я не вижу большой проблемы с условиями. На первом раунде была задача с двойным пониманием, всё остальное вроде однозначно и понятно (ну была ещё задача, которую нужно раза три прочитать, но в ней всё логично). По-моему в прошлых годах было больше проблем, были даже неправильные тесты или ещё в таком духе, когда принимались два решения.

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +20 Проголосовать: не нравится

        Я писал вопросы в систему по поводу понимания условия. Но, к сожалению, это совсем бесполезно. На мой вопрос мне ответили через сутки.

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +8 Проголосовать: не нравится

        В этом году перевод идёт более-менее дословный (то есть текст условия практически такой же, как и был в исходных задачах). Непонятные места закрываются дополнительными сэмплами или переделкой сэмплов. Никакого намеренного усложнения на уровне перевода нет — возможно, что это делалось авторами в исходных контестах (судя по их результатам, весьма правдоподобная версия).

        Возможно, что раньше, действительно, готовые тексты задач несколько больше отстояли от оригинала — как минимум потому, что исходные условия были очень некачественными и приходилось по тестам и решению додумывать часть условия за автора. В этом году "вход" в целом поприличнее... но, как оказалось, всё же недостаточен для того, чтобы ограничиться "идентичным" переводом.

        Feedback, естественно, приветствуется. Как минимум, будет понятно, за качеством условий из каких источников надо будет больше следить. Хотя вроде такое понимание уже есть и сейчас.

        Что касается вопросов в систему: "broadcast" ответы бывают крайне редко, так как по итогам задания вопросов правка вносится в условие задачи (если правка требуется и ответ не No Comments) и для следующих участников вопрос и ответ критичными уже не являются.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Я сдал E на double в Java http://mirror.codeforces.com/contest/1/submission/5759793 (см. метод solve())

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

У меня вопрос, как сдавать нормально A? У меня получилось только пропихивать: сразу определяем можно ли достичь нужную сумму, потом на каждом шаге есть массив достижимых значений, добавляем в следующий шаг достижимые значения из предыдущей вершины, но не добавляем значения больше максимума, если максимум уже превысил необходимую сумму. По-моему, это решение не должно проходить при хороших тестах.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Помогите, пожалуйста, по задаче D. У меня WA3, не понимаю почему. Написал бинпоиск с дейкстрой. вот код http://mirror.codeforces.com/contest/1/submission/5759867 (см. метод solve())

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

А как надо было решать В? Моё решение за получает TL.

  • »
    »
    12 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Например так: http://mirror.codeforces.com/contest/1/submission/5767046 . 0.6s на java7. Просто будем хранить все звонки для каждых пар и потом для каждой пары находим .higher() — время ближайшего звонка в обратную сторону, делаем вывод.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +18 Проголосовать: не нравится

    Задачу B можно было и за квадрат решать — тупо перебираем для каждого, кому он звонил, и кто ему звонил. Почему-то тесты были подобраны таким образом, что это проходит.

    Ещё в задаче C со второго раунда тоже квадрат проходил (при n<=1000000). Интересно, как у жюри получилось сделать такие тесты...

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

К сожалению, не нашел темы для пятого раунда, а новую создавать слишком поздно, поэтому задаю вопрос здесь. Как решать задачу B (Hypercube) с SNWS 2014 Round 5? (http://contest2.yandex.ru/contest/426/problems/B/) Заранее спасибо.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится

    Для удобства считаем, что колонки бывают только 000, 001, 010, 100. В колонки первого типа можно ставить хоть что. Если в колонки остальных типов поставить x0, x1, x2 единиц, то получится 2 уравнения и 3 неизвестных, то есть через одну выражаются две другие. Перебираем её значение, перемножаем три цешки, все это складываем.