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

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

Попытался недавно переписать задачу с C++ на Java. Собственно задача вот. Использовал BufferedReader, вот код

public static void main(String[] args) {
	try(
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));
	) {
		int k, t, p = 0;
		k = Integer.parseInt(in.readLine());
		for (int i = 0; i < k; i++) {
			t = Integer.parseInt(in.readLine());
			p ^= g(t);
		}
		if (p != 0) out.println("Rybka"); else out.println("Watson");
	} catch(IOException e) {}
}

Получил ML, каждая строка во входной последовательности добавляет к использумой памяти примерно 160 кб. Но где там может быть утечка памяти? Посоветуйте кто может, пожалуйста, как от этого избавиться.

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

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

Вы приложили не тот код и неправильно описали свой вердикт: у Вас RE, а не MLE.

А так, проблема тут не в утечке памяти, а в кривых тестах. Вот такой код получает AC, а если заменить long a на int a, то это уже RE на 47 и 48 тестах.

Еще: на е-олимпе, насколько мне известно, все лимиты умножаются на 1.3 для Java и C#.

Не понимаю еще, откуда Вы взяли инфу про 160КБ на одну строчку входных данных. Их же по условию может быть миллион.

P.S. В Java можно с помощью System.gc() информировать сборщик мусора о том, что "пора бы, наконец, поработать".

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

    Признаю, выводы сделал сам: RE получал только в случаях, когда использование памяти выходило за 16 мб. Как только ограничивал количество считываемых строк первой тысячей, то получал результат меньше 16мб. Правда просчитался — там не 160 уж точно, а на порядок ниже.

    Впрочем не страшно, если мои выводы оказались глупыми, на Java раньше задачи не писал.

    Но это нормально, когда потребление памяти в разы больше, чем у решений на C++?