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

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

Для прохождения в Elimination Round 1 нужно попасть в первые 600 участников.

Уже открыта регистрация и продлится она до 19:55 по Москве (возможно до 19:57, но так рисковать я бы не стал).

За первые полчаса более 700 регистраций.

За первый час ~950 регистраций.

Полтора часа: ~1100 регистраций. Видимо активность спала.

Торопитесь! Лимит в 2000 регистраций может быть исчерпан раньше.

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

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Первый раз участвую в этом соревновании.
"Регистрация в этом соревновании доступна только по приглашению" - т.е. на почту что-то должно прийти ? И во всех квалах участвовать нельзя ?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Думаю, это из-за того, что ты еще не зарегистрировался на ТСО.

    У меня было то же самое.

    Зарегистрировался на ТСО - пустили и в матч.

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

      ЭЭ ... В третьем файерфоксе не отображалась кнопка регистрации:)) оригинально весьма .. в хроме работает
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

        Да и после регистрации что-то не хочет пускать.
        UPD: Надо было раньше написать это сообщение, сразу согласился регистрировать :)
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Меня только что пустило. Прошло где-то полчаса после регистрации на сайте. Хотя по правилам не должно было пропускать, т.к. 24 часа не прошли
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Я бы не стал рисковать и до 19:55.

2000 регистраций наберется быстрее.

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Да, поэтому я и написал о 700 регистрациях.
    Но сейчас вроде активность спала.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Я облажался в своем прогнозе, народу намного меньше.

      Интересно, почему.

      -200 автоквалов это да... Но ведь многие, наоборот, как раз под ТСО и вспоминают о ТопКодере. Да еще и время сейчас удобное.

      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        В Японии сейчас например уже заполночь. :-)
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Ну да... Но из последних 5 рейтинговых матчей больше всего активных участников было именно в том, который был тоже в субботу в 20 по Москве (Member SRM 503 - 1949; сравните хотя бы с SRM 502 - 1239). 
13 лет назад, # |
Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

"Чтобы принять участие в Квалификационном Раунде 1 или 2 необходимо зарегистрироваться на Турнир как минимум за 24 часа до начала данного Квалификационного Раунда"

Речь идёт о регистрации на сайте(вот тут справа сверху большая кнопка Register). Насколько я понял, все, кто не зарегистрировался заранее, сегодня уже написать не смогут.

UPD: всё-таки пропускает в арене через некоторое время после регистрации на сайте TCO.

  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Ага, очень мило. Вчера вечером, за 19 часов до контеста, приходит письмо, что нужно быть зареганным за 24 часа :) Но в итоге в арену тоже пустили, посмотрим не забанят ли после раунда..
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Upd: мне кстати до сих пор не пришло письмо, подтверждающее, что я прошел квалификацию. Но в таблице результатов я есть, и рейтинг пересчитали.
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

А нормально, если он меня вроде зарегистрировал по этой ссылке, но не пускает на регистрацию в арене?
UPD: Разобрался. Зарегистрироваться в арене можно спустя какое-то время после регистрации на TCO
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Возможно там ещё надо в окошке нажать на радиокнопку Agree, а потом на кнопку снизу Agree.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Интересно, успею ли, зарегистрировавшись 5 минут назад на сайте.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Печально( в этот раз я не успела зарегестрироваться( Если я не участвовала сегодня, смогу ли я поучаствовать  в четверг?
спасибо.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Да, можно пройти в любом из трёх квалов. Но если уже прошел - писать оставшиеся квалы не пустят. :-)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
а регестрироваться на сайте http://community.topcoder.com/tco11/algorithm/algorithm-schedule/ можно только во время регистрации на сам раунд? Просто я сейчас нажала кнопку register now, он что-то грузит, грузит, и ничего не происходит)
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится



    Вот такое вылезает у меня при нажатии на Register now. FF4.

    После регистрации для надёжности стоит проверить наличие своего хэндла здесь.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Да-да! у меня выводит такую картинку, я захожу под логином паролем своим(топкодеровским) ииии он начинает грузить, грузить и ....
13 лет назад, # |
  Проголосовать: нравится -7 Проголосовать: не нравится
Вторая задача - боян! Много раз уже думал о ней. :-)
  • 13 лет назад, # ^ |
      Проголосовать: нравится -8 Проголосовать: не нравится

    Да как бы и первая боян, и вторая, и третья.

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

    А вот с третьей облом в том, что там надо "чуть оптимальней", чем я писал раньше:)


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

      Закончился контест, можно обсуждать:)

      По поводу  "не оптимально, а чтоб прошло" - вот допустим во второй я в динамике считал, какая вероятность того, что в момент времени i начнется песня j, хотя не важно, какая песня начнется в этот момент - это нужно только для пересчета ответа, но не для промежуточной динамики. В результате можно сложность уменьшить из N*N*T (как у меня... 0.5 пашет) до N*T.

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

      З.Ы. Рейтинг +1, новый 1560... И это с одной задачей. Видимо, сыграло на руку то, что много народу в дивизионе, соответственно, ниже меня много народу...

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Несправедливо о3о Я уже себе МоСк раскрошил, а из ушей кровь течёт О_о
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Я правда только над задачей думал, но не над решением. :-)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А почему в 250-м на тест "1 2 5 6" ответ 2?
У нас в таком случае ведь 1 человек с ответом 1, он не может говорить правду (т.к. не равен 2) и его ответ меньше врунов, значит не врун.
-1 же получается.
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Первый раз такая простая 500 и именно сегодня и именно сейчас надо было чтобы отрубился свет в доме :) Везение +100500
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Интересно, а что за ошибки можно было в 500 наделать? :) Там же динамика коротенькая, да и тесты из условия вроде ловят бред
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Сделать динаму за 80000 * 50 * 50. Хотя на моих тестах работала за 0.5 сек.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      У меня в комнате был такой один, но у него вроде Passed...
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      У меня тоже была такая динамика, на моих тестах стабильно в 0.5 укладывалась.

      Сейчас буду в практисах тестить, может где с индексами натупил или еще что-то в этом роде.

      З.Ы. Да, оно. ТЛ. Я, оказывается, тестил не самый худший случай.

      Если 50 единичек - оно все очень шустренько считает, 0.4

      А если 49 единичек и что-то большое, то там появляются маленькие вероятности, которые долго считаются. Из-за этого ТЛ.

    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      У меня такая ТЛ. А какую надо было делать?
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        у меня за 80 000 * 50
        • 13 лет назад, # ^ |
            Проголосовать: нравится +5 Проголосовать: не нравится

          Переписал за N*T.

          Время 1.5, я в шоке, как оно все делится медленно:) 

          А потом вынес еще вычисление probability[i]/n за пределы внутреннего цикла, так стало 1.95, и дальше что не делаю, меньше не становится:)

          • 13 лет назад, # ^ |
              Проголосовать: нравится +3 Проголосовать: не нравится
            У меня тоже N*T, но со временем 1.299.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            После замены double st[80001]; на vector <double> st(t+1); получил 1.363.
            • 13 лет назад, # ^ |
                Проголосовать: нравится +8 Проголосовать: не нравится
              Добавьте везде проверки, что если значение которое вы собрались поделить меньше 1e-300 то не надо его делить и вообще ничего с ним делать.
              • 13 лет назад, # ^ |
                Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

                Жесть, 23ms против ~900ms.

                Присоединяюсь к вопросу ниже.
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Это действительно помогает. Как выяснилось, на тесте 1 1 .. 1 80001 решение работает ~в 10-15 раз дальше, чем на рэндомном тесте длины 50, ответы как раз вида 1е-302, ... , 1е-302, 0.99999ххх. Не подскажете, почему такая разительная разница во времени выполнения операций?
                • 13 лет назад, # ^ |
                  Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

                  -----------------------------------------
                  Судя по всему double начинает жестко тупить с очень маленькими числами, на самом деле вместо 1e-300 можно вполне поставить 1e-15. Почему так происходит я не знаю :) Забавно кто вообще об этом знал раньше?
                • 13 лет назад, # ^ |
                  Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

                  В топкодеровском чате writer сказал что дело в кеш-промахах.
                  Но похоже это не так.
                          double a = 1.0;
                          double ma = 1.0;
                          for (int i = 0; i < 10000000; i++) {
                              a *= ma;
                          }
                  работает 19мсек

                          double b = 1.24E-322;
                          double mb = 1.0;
                          for (int i = 0; i < 10000000; i++) {
                              b *= mb;
                          }
                  работает 652мсек

                  Осталось только понять почему)
                  • 13 лет назад, # ^ |
                    Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

                    =========================
                    Думаю он ошибаеться. Давайте делать все то же самое, что делали раньше, только после каждого обновления какой-то ячейки записывать в неё 1. Чтобы действия всегда происходили с не маленькими числами. Мы получим неправильный ответ, но программа станет работать в разы быстрее. И при чем тут кэш промахи?
                    • 13 лет назад, # ^ |
                        Проголосовать: нравится 0 Проголосовать: не нравится
                      Да, похоже ты прав, сам попробовал отсечь именно деление и время сократилось.
                      Но понятия не имею почему это может быть так.
                      • 13 лет назад, # ^ |
                          Проголосовать: нравится +3 Проголосовать: не нравится
                        Вот такой код:

                        public class DoubleSpeed {
                            static long test(double theValue) {
                                long t0 = System.currentTimeMillis();
                                double sum = 0;
                                for (int i = 0; i < 100000000; ++i) {
                                    sum += theValue / 10000.0;
                                }
                                return (int) (sum * 0.0) + System.currentTimeMillis() - t0;
                            }
                            public static void main(String[] args) {
                                for (int i = 10; i <= 307; ++i) {
                                    if (i > 290 || i % 10 == 0) {
                                        double theValue = Double.parseDouble("1e-" + i);
                                        System.out.print(theValue + ": ");
                                        System.out.println(test(theValue));
                                    }
                                }
                            }
                        }


                        привел вот к таким результатам:
                        ...
                        1.0E-298: 121
                        1.0E-299: 122
                        1.0E-300: 121
                        1.0E-301: 122
                        1.0E-302: 121
                        1.0E-303: 121
                        1.0E-304: 6374
                        1.0E-305: 6373
                        1.0E-306: 6377
                        1.0E-307: 6375

                        Забавно, раньше не знал, что так бывает.
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится

                Ого, спс...

                С подобным отсечением у меня N*N*T около секунды работает.

          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            У меня деление на n заменено на умножение на предварительно посчитанный 1.0/n, никаких других оптимизаций. На максимальном тесте за 0.02 сек отрабатывает на далеко не самом сильном процессоре, то есть в принципе даже ещё на N можно было умножить без опасений TL.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    я когда придумал N*N*T, на калькуляторе перемножил как 80000*250, ну и закодил. Даже и не думал до конца контеста, что это может не проходить. :)
    • 13 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится
      250 ?
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

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

          50*50 = 250 ?

          UPD: глубокомысленные комментарии )
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          А 500 откуда? Думаю, вопрос был не о том, какая задача, а почему на калькуляторе умножал на 250, а не на 2500.

          И, может быть, в этом и была причина облома, что не на то умножил:)

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

        0 забыл один, да :). Если бы посчитал 2500*80000, придумал бы что-то другое.
13 лет назад, # |
  Проголосовать: нравится -7 Проголосовать: не нравится
235,72.
Оказывается для квалификации достаточно было сдать быстро 1 задачу.

13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
А как увидеть на каком тесте и с каким вердиктом упало решение?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Сейчас можно нажать в таблице на себе правой кнопкой, History, отсортировать по баллам и найти тест с отрицательным значением очков.

    Да и скоро статистика на сайте будет. В том числе и тесты.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Спасибо, но немного не понятен репорт.
      Вторая информация после квадратных скобок это мой ответ или ответ жюри?
13 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Хм. Сегодня очень оперативно протестили, рейтинг оновили и т.д. От окончания матча прошло 25 минут, а уже открыли практисы.
13 лет назад, # |
  Проголосовать: нравится -10 Проголосовать: не нравится
Эх, написал ДП за 80000 * 50 * 50 в 500 и фигню в 250. В итоге 50 очков и то благодаря халявному челленжу в стиле Div-2 .
Весело начинается TCO :)
13 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Так, я туплю или дорешать пока нельзя?
Не учел граничный случай в 1000 =_= хочу проверить пройдет ли если его учесть
UPD. Как оказалось, я туплю.
UPD. +1 строчка - и 1000 прошла =_=
13 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Не бывает зла без добра. С сегодняшней 500 я для себя вынес, что деление делению рознь, даже если типы одинаковые:)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А на сколько шустры сервера ТС? Чтобы знать о ТЛ.
Именно интересуют стандартные 0.5, 1, 1.5, 2
И где они пишут МЛ?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    МЛ стандартно 64 метра.

    На сколько шустры - можно потестить в практис-руме.

    Или взять реальную задачу, которая интересует, или просто 

    for (int i=1;i<=100000000;i++)
    {/*какая-то операция, которая интересует*/;}

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    где то пишут - 64 MB,  при подозрении на TL можно протестировать в самой арене.
  • 13 лет назад, # ^ |
      Проголосовать: нравится -12 Проголосовать: не нравится
    Вы бы погуглили перед вопросом, легко же ищется. Или хотя бы почитали внимательно FAQ, он для того и создан.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
+173 Аееееееееееееееееееееееееееее =))
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А как делать 500?
  • 13 лет назад, # ^ |
    Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

    Сначала считаем динамику за t*n - вероятность, что в t-й момент времени начтётся очередной трек. Делается это так. Сначала d[0] = 1. Потом для каждого i = [ 0, t ) и для каждого j = [ 0, n ), d[ i + len[j] ] += d[i] / n (вероятность, что в i-й момент времени начтется трек * вероятность, что начтется j-й трек это 1/n ).

    Затем для каждого трека считаем сумму вероятностей, что наш трек начался в t-й момент времени, в t-1, t-2, ... t-len[i]+1, это будет сумма d[t]/n + d[t-1]/n + ... + d[t-len[i]+1]/n.

    Это решение за N*T. У меня получилось сдать его в дорешивании за ~900ms+ и на туре за 1,5 секунды примерно.

    Но если на первом этапе добавить проверку, что если наше d[i] < 1e-300, то continue, то решение ускоряется до 20ms. Вероятно проблемы была в денормализованных числах, которые очень долго программно считались на машинах TC.

    Надеюсь понятно объяснил %)