При написании тренировочного контеста столкнулся с следующей проблемой. На задачи G.Сортировка я получал ТЛЕ при этом ограничение по времени 2000 мс.
Немного о входных данных: В первой строке находится одно целое число – количество тестов T (от 0 до 2000). Каждый тест содержит две строчки. В первой строчке указано целое число n (от 1 до 2000), во второй строчке через пробел указаны n различных чисел от 1 до n.
Мой алгоритм решения данной задачи O(n*T). Но как выяснилось вердикт ТЛЕ всплывал еще при вводе, даже при использование scanf().
После тренировки на дорешке мой сокомандник предложил посимвольный ввод и собственное преобразование числа (ниже мой вариант реализации):
int in()
{
int res=0;
char c;
while(1)
{
c=getchar();
if((c<48||c>57))return res;
res=res*10+c-'0';
}
}
После этого задача прошла (собственно решение) и время выполнения составило всего 372 мс. Тестировали задачу на следующих компиляторах: CNU C++ 4.7 , CNU C 4 и MVS C++ 2010. Последний к сожалению оказался слоупоком и данное решение всеровно тлешилось.
Теперь скорей всего главный вопрос и вообще зачем написана данная статья. Просмотрев решение других участников увидел решение сданы на CNU C++ 4.7, CNU C 4 и MVS C++ 2010 с тем же алгоритмом, но при этом с приемлемым временем. Почему так произошло, или это все из-за того, что сейчас на Codeforces используется режим совместимости?
Кстати можете попробовать сдать данную задачу, и убедится в том, что даже решение которое проходило раньше теперь не пройдет).
PS: Это мой первый пост, так что простите за оформление и другие недочеты.








