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

Автор PAP, 11 лет назад, По-английски

hello!
topcoder SRM 591 will take place Monday, 16 September 2013 at 21:00
Lets discuss problems here after end of the contest.
thank you all and have fun!

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

»
11 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

It can't happen today in any timezone as there is more then 24 hours till SRM

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

Thanx;)

»
11 лет назад, # |
Rev. 3   Проголосовать: нравится -84 Проголосовать: не нравится

topcoder is useless site!
I don't recommend it for coders!

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

    If you only registered to write comments like this one, it'd be better if you didn't at all.

    While TC has a smaller variety of problems and weird restrictions (which sometimes lead to a lot of unnecessary input parsing), and the contests are done using a fail Java arena (I've never been able to log in when using a proxy server in Slovakia), the problems are often interesting and it has other well done features on the site, like algorithm tutorials. It's still worth competing.

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

А как 500 то решать?

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

    Ну мне не хватило 30 секунд на перебором сгенерировать ответ для маленьких и решить систему урвенений на коэффициенты при n*m, n*m/g, n*m/(g*g), n, m, n/g, m/g, (n/g)%2, (m/g)%2, 1. Оно решается и получается что-то очень простое. В practice прошло.

    P.S. g = gcd(n,m); n это 2*n-2 исходное; m это 2*m-2 исходное. На самом деле из этого всего нужно только n*m/g, n*m/(g^2), n/g, m/g, 1. Но это как-то не очевидно.

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

      А почему нужно искать зависимость именно от этих величин, а не от чего-нибудь еще?

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

        Ничего более разумного, чем потому что нашлась сказать не смогу, если честно . Сам их выписывал из соображений того что вылазило в попытках выписать руками. В частности сначала забыл 1, и оно не хотело решаться.

  • »
    »
    11 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится -8 Проголосовать: не нравится

    Как я решал (сдал правда после контеста): Будем решать немного по-другому сформулированую задачу. Пускай есть бильярдный стол размером N-1 на M-1. Из одного из углов вылетает шар. Шар отбивается от сторон стола. Нужно определить во скольких точках с целочисельными координатами побывает шар.

    Сначала найдем количество отрезков типа нижняя часть — верхняя часть. То есть, сколько раз шар пройдет путь от нижнего края к верхнему. Пускай таких отрезков X. X = НОК(N-1, M-1) / (M-1). (M < N) Тогда количество точек будет X * (M — 1) + 1 (каждый по M — 1 точке + стартовая) Теперь нужно убрать точки пересечения отрезков. Каждая из таких посчитана дважды. Найдем число Z = ceil(N / M) — сколько отрезков после вылета шар пройдет до первого пересекающегося отрезка. И запомним точку в которой он окажется. Теперь запустим цикл (пока не придумал как его превратить в формулу): На каждой отерации смотрим, если шар из данной позиции пролетит Z отрезков и при том перед ударом об боковую стенку будет лететь снизу, то отнимаем от ответа Z * номер итерации (номер итерации — это по сколько точек пересечение будет имет каждый из отрезков текущей итерации), иначе отнимием (Z — 1) * номер отерации ( так как последний раз он летел сверху перед ударом об боковую, то на последнем отрезке он пересечет количество отрезков, равное текучей итерации, иначе — уже не единицу больше — что мы и учтем на следующей итерации). И не забудем обновить текущую позицию. И так пока все отрезки не рассмотрим.

    Если кто разберется, что я здесь написал, скажите, правильное ли решение (а то ТС пишет, что "Problem successfully submited for ... points", а я так и не понимаю, значить ли это АС, или же просто это успешная отправка.

    UPD. Понял как на системных тестах проганять — один ТЛ, остальное — АС. То есть осталось только с циклом разобратся... code

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

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

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

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

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

    Я могу рассказать как предполагалось её решать.

    Во-первых, как уже предложил Witalia, представим задачу в виде "есть поле N x M, из угла вылетает шарик/слон и бегает, отталкиваясь от сторон; посчитать кол-во различных клеток". Опытным путем можно увидеть красивые паттерны посещаемых клеток. Например, вот какие клетки будут посещены на поле 19 x 16:

    X.....X.....X.....X
    .X...X.X...X.X...X.
    ..X.X...X.X...X.X..
    ...X.....X.....X...
    ..X.X...X.X...X.X..
    .X...X.X...X.X...X.
    X.....X.....X.....X
    .X...X.X...X.X...X.
    ..X.X...X.X...X.X..
    ...X.....X.....X...
    ..X.X...X.X...X.X..
    .X...X.X...X.X...X.
    X.....X.....X.....X
    .X...X.X...X.X...X.
    ..X.X...X.X...X.X..
    ...X.....X.....X...
    

    Паттерн заключается в том, что поле поделится на ромбики, полуромбики и четвертьромбики с "радиусом" равным gcd(N-1, M-1). Думаю, после этого наблюдения можно решать кучей способов. Я предлагал считать сколько у нас будет фигур каждого типа и вычитать их суммарную площадь из NM. rng_58 предложил делать ещё проще. Для иллюстрации возьмём поле 11 x 16 и пометим все клетки, чьи координаты делятся на gcd(N-1, M-1)=5:

    Y....Y....Y....Y
    .X.......X.X....
    ..X.....X...X...
    ...X...X.....X..
    ....X.X.......X.
    Y....Y....Y....Y
    ....X.X.......X.
    ...X...X.....X..
    ..X.....X...X...
    .X.......X.X....
    Y....Y....Y....Y
    

    Для вычисления ответа нам нужно посчитать, сколько всего на поле Y-ов, сколько из них мы посетим и сколько осталось X-ов.

»
11 лет назад, # |
  Проголосовать: нравится -35 Проголосовать: не нравится

А что в 250 за наркоманию писали? Кто трехмерную динамику, кто вообще деревья строил... она же в одну строчку решается.

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

    Ну круто, только главное — это не красивее решить, а побыстрее сдать. Вот все и кодили то, что первое в голову приходило.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится -21 Проголосовать: не нравится

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

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

could any one explain the approach of DIV2 1000 point problem. http://community.topcoder.com/stat?c=problem_statement&pm=12750 I am habitual of using topdown approach of solving dp problem and I am unable to implement it using top down. please suggest some link on similar problems where bottom up approach is efficient. Thanks in advance

»
11 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Does anybody know why the first problem in div1 was 275 points? I mean, the code was short and the problem was not that hard.

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

    I am surprised to see that people question additional 25 points for easy and do not complain about a 500-pointer solved by 19 people only :)

    The easy seemed a bit trickier than an average d1-easy, so its point value was raised. It turned out the other way.

»
11 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится