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

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

Сейчас на контесте заливал задачу B для второго дива и столкнулся с проблемой, заключающейся видимо в классе Date.

http://mirror.codeforces.com/contest/304/submission/3708026 — это сабмит, который не проходит второй претест, на моем компе результат, выдаваемый на такой набор входных данных, отличается от полученнего на кф(собственно на моем компе считается правильно).

http://ideone.com/qAWGrd — мой код, на второй претест выдает верный ответ.

Почему так происходит?=) http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html — прочитал это, но мне это не очень помогло

UPD: подглядел чье-то решение на Java, и вот такой код зашел — http://mirror.codeforces.com/contest/304/submission/3712817 . Но ведь секунды,минуты, час не задаются и при делении не должно получаться дробей, но судя по тому что это заходит, они там как-то получаются.

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

»
12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Цитата из джавадока по вашей ссылке:

In UTC, however, about once every year or two there is an extra second, called a "leap second." The leap second is always added as the last second of the day, and always on December 31 or June 30. For example, the last minute of the year 1995 was 61 seconds long, thanks to an added leap second.

Ну и если вдруг для даты используется локаль с переводом на зимнее/летнее время, то вообще не во всех календарных сутках будет по 24 часа.

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

    я вначале тоже подумал про секунду, но она же добавляется, а на втором претесте у меня терялась единица, видимо после деления дробная часть была типа 0.9, а при лонгах она терялась как раз. а вот локали, да, не подумал.

    спасибо.

»
12 лет назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится

Решение заходит, если добавить строчку format.setTimeZone(TimeZone.getTimeZone("UTC"));

Разница в час возникает из-за какого-нибудь перевода на летнее время