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

Автор DDBull, 15 лет назад, По-русски
Здравствуйте, у нас недавно в Казахстане прошла Республиканская олимпиада среди школьников. И вот там была одна задача, я написал решение этой задачи и мое решение выполнялось всегда за константное время - 1.6*** секунд(для измерения времени я использовал #include<ctime>). У нас жюри для измерения времени использует run.exe(все решения проверяются на 2-х ядерных компах), и run.exe посчитал что мое решение выполняется за 7.** сек!!! Но программа реально выполнялось меньше 2-х секунд и по этой задаче мне поставили 0 баллов! Вот хотелось бы спросить, что вы используете для измерения времени выполнения?
P.S. Прощу прощения за свой "плохой" русский. 
  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

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

В UNIX системах для этого есть команда time.

http://ru.wikipedia.org/wiki/Time_(Unix)

15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Вы использовали функцию clock()?
15 лет назад, # |
  Проголосовать: нравится -17 Проголосовать: не нравится
Время можно измерить с помощью простого батника (не забывайте это время на вашем компьютере!)

Допустим батник назовём HowTime.Bat
Внутренность батника такова:
 @echo %time%
 %1
 @echo %time%

Теперь как проверить сколько работает ваша программа:
Запускаем HowTime.Bat Solve.exe
Где Solve.exe это ехешка вашей программы ...
В консоле после отработки вашей программы вы увидете время начала процесса, и время конца процесса.
Ну а само время работы будет равно конец - начало времени.
А более простыми словами этот батник просто измеряет время когда ваша программа начинает работать и время когда она завершает работу!

Если вам лень отнимать от конча начало =) можете просто написать ещё дополнительную утилитку которая будет это делать ^^ Удачи =0
15 лет назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится
Побуду капитаном очевидность.
В компутере время есть разное. Например, есть настенное - его и видно через ctime. Очевидно, что оно не имеет никакого отношения ко времени затраченному на выполнение программы, потому что современные системы устроены сложнее чем счёты и нужно учитывать хотя бы многозадачность.

Поэтому под виндой контестер использует либо функцию QueryInformationJobObject с параметром JobObjectBasicAccountingInformation, либо функцию GetProcessTimes. Из того, что эти функции возвращают, контестер смотрит в user time.

Такие дела.
Привет.