Please subscribe to the official Codeforces channel in Telegram via the link https://t.me/codeforces_official. ×

AndreySiunov's blog

By AndreySiunov, 13 years ago, In Russian

Доброго времени суток, читатель.

Немного из того как я решал сотый раунд.

Началось с того, что я решил задачу А... скажем, за нормальное время (АС на 9 минуте).

Открыв задачу B и посмотрев на монитор, решил что её я буду решать позже. Прочитал задачу С и сразу подумал, что её следует решать с использованием какой-то структурки, наподобие priority_queue. Естественно я по-быстрому написал решение с stl-ной структурой priority_queue. Когда моё решение нормально отработало на тестах из условия, я сразу захотел потестить на большом примере. Естественно выбрал тест n=100000, а комы по одной штуке с размерами от 1 до 100000. Запускаю и... происходит что-то неладное... моё решение работает ооочень долго. Даже на похожем тесте, но с n=10000 моё решение работает около 8 секунд. Далее я подумал, может я не всё знаю о priority_queue и сделал тот же алгоритм, только с map. Результат оказался тем же. Ещё чуть погемороился и забил на эту задачу. 

Перешёл к задаче D. Уважаемая Наталья, я честно не представляю, как можно сразу не увидеть здесь тупой сорт и пробег по массиву. Мне кажется это самое очевидное решение, и как можно убедиться, правильное. Вобщем я ещё несколько минут пытался придумать что-то плохое в этом решении, ибо не верил своим глазам, что эта задача имеет номер D. Ничего плохого не увидел, закодил и сдал. Мне кажется, эта задача должна была иметь номер A.

Так. После я прочитал эту ужасную задачу B. Не, задача то может и неплохая, но блин пока её поймёшь, вобщем страх. С полной кашей в голове я её еле-еле понял и сдал.

Вернулся к С... Вобщем получилось так, что эта лажа, которая будет описана ниже, выбила меня из колеи и я потерял кучу времени, так и не сдав правильное решение, которое на мой взгляд должно было заTLиться. А ведь были шансы...

Так вот. Мне кажется это когда-то обсуждали и связано это с режимом запуска, т.е. релиз или дебуг, но всё-таки ничего не понятно. Моё решение по задаче С у меня на компе долго работало. У меня стоит VS2010Pro. Моё решение практически идентично вот этому решению http://codeforces.com/contest/140/submission/999273 . И давайте будем опираться на него. Итак, если поменять строку (scanf("%d",&n);) на (n=100000;) а (scanf("%d",&x);) на (x=i+1;) то получится, что при запуске на сервере она работает 170 мс. Если же запустить у себя на компе, то работает такая программа невообразимо долго... Причём работает оочень долго уже на вот этом цикле 
for (map<int,int>::iterator it = a.begin(); it != a.end(); ++it){
q.push(PII(it->second,it->first));
}


Вопрос: почему так происходит с длительностью работы и как правильно узнать время работы программы, кроме как запуск на сервере?

  • Vote: I like it
  • +23
  • Vote: I do not like it