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

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

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

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

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

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

Look at mike's comment: blog.

»
8 лет назад, скрыть # |
 
Проголосовать: нравится 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.

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

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

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

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