Стандартная библиотека C++ (2015)

При округлении trunc(time + 0.001) т.е вниз мы получаем время на 1 меньше чем сейчас в correcte т.е 2 и 6 вместо 3 и 7 соответственно для первого и второго вызовов REQUEST 3(Это про 7й тест естественно)

trunc это не округление, а усечение. (для положительных цисел - всегда вниз). round - округление

Вероятнее всего, там еще несовпадения из-за проехавших по встречке за время, большее одной минуты. По условию, их скорость не учитывается.

Мы это обсуждали в классе. Команда trunc(time + 0.001) обеспечивает следующее: 29.999->30; 29.998->29 и тд. Что и означает округление вниз с точностью до 0.001

Понял, ну это надо отменять теперь

Могу запросто подобрать набор входных данных, чтобы это обеспечивало 29. Это плохой способ очень.

Оно будет 30, если 29.999 будет представлено, как 29.99900000001. Но ведь оно же может быть и 29.99899999999.

@RS, зачем такие мутности делать с этим округлением? Куда проще было бы выводить вещественные значения.


Это все к тому, что могут быть разные способы поддерживания средних скоростей: в int или в float. Сразу все среднее арифметическое или накомпленные суммы: у кого-то представление совпадет с авторским, а у кого-то - нет.

Не думаю, что этот курс преследует цель наказать тех, кто не знает всех тонкостей работы с вещественными числами.

Вот именно поэтому я четко указал как надо округлять, чтобы получить ответ эквивалентный эталону.

Имеется:

Тест 10: всего 5 дорог. 2я дорога WALK. по request 2 выводит 0 3 1 4 2 (в correctе).

Вопрос: нужно ли так или все же корректно 0 3 1 4?

Нужно корректно.

Это какая-то странная ошибка. Output будет поправлен.

Тест 5: Похожая ситуация:

5 4 10 11

6 7 3 CAR 2 60

4 1 3 CAR 2 60

1 1 4 CAR 1 40

2 4 6 WALK

Output по Request 2 : 2 3 4 7 8

3ей дороги там не может быть

Тест 14:

Ошибка в ответе на 10:44 REQUEST 2.

Там был пользователь на 16 дороге(В этот момент он был на перекрестке дорог 1,16) со скоростью 20 и двигался он в правильную сторону (Это самая маленькая средняя скорость вообще во всем тесте)=> 1е две цифры по REQUEST 2 должны быть 1 16

У меня выдал 1 16 5 0 6

В Correct:0 1 5 6 7

request 2 приходит спустя больше чем 30 минут - данные перестали быть актуальными - счетчики должны быть уменьшены.

Но я там нашел другой интересный баг, сейчас поправлю.

В этом тесте correct правильный.

Дык был вопрос:

И Роман Борисович ответил

P.S Действительно если почистить, то совпадает с Correctом. Я тоже писал этот кусок кода:smile:

Я не понимаю этого:

В условии четко написано:

Система способна рассчитать среднюю скорость движения автомо билей за последние 30 минут

Значит, нас интересуют все события, которые произошли за последние 30 минут от текущего времени, не позже.

Честно говоря тоже так считаю, ща разкоментирую и залью тогда)

В REQUEST 3 также?? А то у меня упорно 7й тест не совпадает по 1му REQUESTу 3.

Скорость-то у нас общая для всей системы, так что для совпадения ожидается, что да.

Все тесты совпали кроме 7го, никакие добавки не помогли…:

Ошибка:

Мое:

NOTHING

5

2

Correct:

NOTHING

5

4

В остальном 7й тест совпал.

00:30 REQUEST 3 5 50 70 50 150 100 150 150 150 150 90

А может быть такая ситуация как здесь: вверх-> вправо->вверх->вниз?

т.е в конце он проехал по одной и той же дороге дважды вверх, а затем вниз?

Пояснение 8: Маршрут в запросе 3 состоит как минимум из одного отрезка. Каждый отрезок маршрутацеликом принадлежит некоторой дороге. Никакие два подряд идущих отрезка не могут принадлежать одной дороге.=> 7 тест не подходит под пояснения

Небольшая техническая деталь:

Поскольку в ближайшем светлом будущем все-таки появится тест, в котором рассчетная скорость = 0, (при рассчете времени в пути будет получена бесконечность, а выводить что-то надо), чекер будет принимать один из следующих трех ответов:

-1
never
inf

Список, возможно, будет правиться.

Еще немного полезных штук:

trunc(val) возвращает double. Если делать int(trunc(val)), то, может так случится, что trunc вернет, например, 31 в виде 30.99999999, но после приведения к int получится 30. Лучше либо не делать так (выводите сразу значение trunc(val) с точностью - ноль знаков), либо кастовать к инту следующим образом: int(trunc(val) + 0.5).

Если, вдруг, расстояние считается, как sqrt((x1-x2)^2 + (y1-y2)^2), то лучше не писать эту формулу, а воспользоваться уже готовой библиотечной функцией hypot(x1-x2, y1-y2). Она работает с меньшей погрешностью. Лежит в cmath

Тесты, которые будут бить именно по этим двум моментам, специально генерироваться не будут, но мало ли у кого какая везучесть :slight_smile:

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

Запросто: все объекты стоят на месте: скорость у каждого 0.

update: 17й тест

Имеет ли значение в какой последовательности выводятся нарушения для некого агента? Например: Водитель проехал перекресток двух двустронних автомобильных дорог с превышением. В выходном файле должно быть записаны строчки:

//превышение для вертикальной дороги//

//превышение для горизонтальной дороги//

или

//превышение для горизонтальной дороги//

//превышение для вертикальной дороги//