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


#186

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


#187

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

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


#188

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

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


#189

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

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

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


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

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


#190

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


#191

Имеется:

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

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


#192

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

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


#193

Тест 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ей дороги там не может быть


#195

Тест 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


#196

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

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

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


#197

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

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

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


#198

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

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

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

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


#199

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

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


#200

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


#201

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

Ошибка:

Мое:

NOTHING

5

2

Correct:

NOTHING

5

4

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


#202

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

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

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

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


#203

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

Поскольку в ближайшем светлом будущем все-таки появится тест, в котором рассчетная скорость = 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:


#204

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


#205

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

update: 17й тест


#206

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

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

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

или

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

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