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

Автор dmkz, история, 6 лет назад, По-русски

Есть две посылки на C#: с многопоточкойAccepted и без многопоточкиTLE. Автор решения использует Parallel.For в функции MultiplyMatrixPow, за счет чего и добивается успеха. Вопрос: сколько ядер мы можем нагружать на серверах codeforces при проверке нашего решения?

UPD: Многопоточка здесь ни при чем. В первом решении автор берет остаток от деления три раза, во втором всего один. Отсюда и выигрыш.

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

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

Look at mike's comment: blog.

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

    Thanks, it turns out that additional cores are not used to run the program.

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

    But why use of the parallel for speed up the solution? Are there any optimizations in comparison with the usual cycle for?

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

As far I know, you'll never decrease the running time on all adequate e-judges via additional threads, since they're single-cored. Your case is probably false-positive, I mean when I was writing solutions on C#, it could give different execution time on the server, and your code may give a result somewhere in an interval [2000-x, 2000+x] of milliseconds, almost randomly.

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

Разница в посылках не только в Parallel.For. Если взять посылку с Parallel.For и заменить его на обычный for, то тоже получим AC: http://mirror.codeforces.com/contest/691/submission/41135667

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

    Увидел, в первом решении автор берет остаток три раза, во втором решении всего один, спасибо. А я затригерился только на Parallel.For