Блог пользователя ivan.popelyshev

Автор ivan.popelyshev, 13 лет назад, По-русски
"Лучше поздно чем никогда" (c) Егор.
Сегодня, 8 декабря, состоялся очередной СРМ.
  • Проголосовать: нравится
  • +7
  • Проголосовать: не нравится

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Только успел удивиться тому, что этой темы еще нет.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    Я ждал что Егор создаст :)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Я вспомнил про СРМ только из смски от гуглокалендаря за час до начала. Так как этот час я посвятил дебагу, а сразу после СРМа уехал играть в футбол - топика не получилось :(
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
У меня вот из-за маленькой ошибки упала 1000 :( Времени не хватало, не успел как следует протестировать, засабмитил в последнюю минуту.
13 лет назад, # |
  Проголосовать: нравится +19 Проголосовать: не нравится
Впервые столкнулся, что for(int i = 0; i < 10^9; ++i) t += i; проходит в 2 секунды. -25 впустую... Будем знать)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Как узнать вердикт по задаче, не прошедшей системные тесты?
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Правой кнопкой нажать на ник, выбрать History и в меню найти тест на котором упало. Если вернуло не null, то ВА, иначе ТЛ или РЕ.
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
Подскажите, пожалуйста,  как решать 500-ку 2 дива
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Пусть g = gcd(N, M). Ответом будет g*(N/g-1)/2.

    Что это значит: сокращаем отрезок [0, N-1] в g раз. Тогда каждый элемент получившегося отрезка будет входить в сумму w(i). Считаем сумму элементов этого отрезка - числа от 0 до N/g-1:  s = N/g*(N/g-1)/2. Домножаем на g, чтобы получить реальные значения из первоначального отрезка, и берем среднее. получается как раз g*(N/g-1)/2.

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

    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Объясните пожалуйста на этом примере:
      6 3

      Как я понел мы делим последовательность 3 6 9 12 15 18 на три отрезка в каждом из которых время 0 3.
      В итоге 0 3 0 3 0 3
      Вы говорите, что в каждом отрезке числа от 0..N/g - 1, но тут только 0 и 3, а не 0 1 2
      ???
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Смотри. У тебя через M*N/GCD(M, N) - второе число, из тех что порождаются числами кратными M, которое сравнимо с 0 по модулю N. Т.е. далее будет циклично и достаточно рассмотреть на этом промежутке. Если рассмотреть числа M/GCD(M,N) и N/GCD(M,N), то ответ будет меньше в GCD - раз (просто все отрезки в GCD раз меньше будут). Ну а тут уже если воспользоваться знаниями из теории числе, то тогда M/GCD порождает полную группы вычетов по модулю N/GCD, т.е. у тебя повторятся все остатки.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Пусть D = НОД(N, M)
    рассмотрим последовательность ai = (i * N)modM.
    Взяв i = N * M / D получаем что a0 = ai = 0, а значит последовательность имеет данный период (можно доказать что он минимален). При этом значения ai должны делиться на D, поскольку они являются линейной комбинацией N и M. Используя расширенный алгоритм Евклида можно доказать что последовательность пробегает ВСЕ числа меньшие M и делящиеся на D, то есть 0, D, 2D, ... M - D. Среднее у этих чисел - (M - D) / 2, вот и ответ.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

550ка немного хмурная.

Если понять условие она простая. Но сначала надо понять условие и нигде не скосячить (что я успешно провалил, неверно посортив слова).

13 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
what is the proof of the div2 500 soln:

ans = abs( N - gcd( N, M ) ) / 2.00 ???
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Assume D = GCD(N, M)
    Waiting time of starship is a divisor of D, because it is always linear combination of N and M.
    Assume waiting time of i-th starship is ai.
    ai + 1 = ( - i * M)modN, a0 = aN = 0,  , so the sequence is linear and has a period. The answer is an average value of one period of the sequence.
    D = x * N + y * M for some x, y (extended euclidian algorithm ), so ay = N - D, hence every k * D , 0 <  = k * D < N is found in the sequence.
    The answer is average of  k * D where 0 <  = k * D < N which is (N - D) / 2.0
    • 13 лет назад, # ^ |
        Проголосовать: нравится +4 Проголосовать: не нравится
      Can't i solve this question by iterating all the sequence till suppose eg. 100000000 (taking it as infinity)?

      Or Is there any other approach to this question?
      • 13 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        http://forums.topcoder.com/?module=Thread&threadID=695574&start=0

        check this link & its 2nd page!
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Не могу найти ошибку в своей логике в поиске кратчайших расстояний от одной клетки до всех остальных в пределах одного шаблона в Div1-1000. Эта тема уже поднималась на форуме топкодера.

Задача стоит так: найти кратчайшие расстояния от заданной клетки (R,C) до всех остальных клеток (R',C'), находящихся в том же шаблоне, т.е. таких, для которых floor(R/H) = floor(R'/H). Один из способов заключается в том чтобы сделать лабиринт конечным, дописав к начальному шаблону еще X штук сверху и снизу, а затем искать кратчайшее расстояние обычным bfs'ом. 

Я думал что X<=W. В задаче с ограничениями из СРМа достаточно было взять X<=W+3 (подозреваю, что и X<=W тоже подходит), но в общем случае это не так. Существует тест 49х48 для которого X=61.

Вот мои рассуждения:
Предположим, что кратчайший путь из (R,C) в (R',C') спускается более чем на W полных шаблонов вниз (назовем это количество Xd). Выпишем все номера столбцов, в которых следуя этому пути мы пересекаем границу соседних двух шаблонов по направлению вниз (это касается только тех шаблонов, которые лежат не выше чем тот из которого мы стартовали). Так как Xd>W, какой-то столбец повторяется дважды. Вырежем весь путь между этими повторениями, уменьшив тем самым его длину. По предположению наш путь кратчайший, следовательно, укоротить мы его не можем, отсюда Xd<=W.

Аналогично покажем что максимальное количество полных шаблонов на которое нам нужно подняться вверх (назовем его Xu) не превышает W. Поскольку X=max{Xd,Xu}, можем записать что X<=W. 

Где-то в моих рассуждениях есть ошибка (раз существует контрпример), но я найти ее не могу. Буду благодарен, если кто-то укажет на нее.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Проблема в том, что если мы вырежем этот кусок пути, то закончим уже не в клетке (R', C'), а на какое-то количество шаблонов выше, а это уже не совсем то, чего хотелось бы достичь.
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Thanks a lot for the proof :D