На Timus Online Judge обновлены компиляторы:
MinGW GCC 4.9.1
Clang 3.5
FreePascal 2.6.4
JDK 8.0
Scala 2.11.2
Python 2.7.8
Python 3.4.1
Некоторые изменения:
Благодаря компилятору Clang на Тимусе теперь поддерживается C++14.
Для всех новых компиляторов ненулевой код возврата решения теперь приведет к результату проверки Runtime error (non-zero exit code).
Вызов функции exit а Питоне больше не приведет к Runtime error.
В MinGW программы линкуются с libmsvcr110, а не с libmsvcrt, что, например, позволяет пользоваться спецификатором %lld, а не %I64d. Если интересно, как это настроить, спрашивайте.
Проблема с BigInteger.isProbablePrime в JDK теперь решается не как раньше. В JDK 8.0 этот метод перестал по-умолчанию зависеть от SecureRandom. Теперь isProbablePrime использует ThreadLocalRandom, который инициализируется исходя из MAC-адреса и текущего времени. Поскольку MAC-адрес на сервере никогда не меняется, а его определение требует доступа к опасным функциям, этот шаг инициализации ThreadLocalRandom был убран.
Подробнее в новостях на Тимусе.
UPD. Как в MinGW слинковать программу с libmsvcr110.
Создаем файл specs.msvcr110:
%rename cpp msvcrXX_cpp
%rename cc1plus msvcrXX_cc1plus
*cpp:
%(msvcrXX_cpp) -D__MSVCRT_VERSION__=0x1100
*cc1plus:
%(msvcrXX_cc1plus) -D__MSVCRT_VERSION__=0x1100
*libgcc:
-lmingw32 -lgcc -lgcc_eh -lstdc++ -lmoldname -lmingwex -lmsvcr110
В командную строку компилятора добавляем опцию -specs=specs.msvcr110
.
В MinGW программы линкуются с libmsvcr110, а не с libmsvcrt, что, например, позволяет пользоваться спецификатором %lld, а не %I64d. Если интересно, как это настроить, спрашивайте.
Интересно, спрашиваю :) . А
%I64d
при этом ведь перестаёт работать? Тогда ещё интересно, можно ли поймать такую линковку на уровне кода решения (#ifdef
), чтобы написать переносимое решение, вида: