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

Автор sneltyn, 13 лет назад, По-русски

При написании тренировочного контеста столкнулся с следующей проблемой. На задачи 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: Это мой первый пост, так что простите за оформление и другие недочеты.

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

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

В действительности, проверил, проблема имеет место быть. За что заминусовали человека?)

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

Сдал, прошло за 1340 мс.