Контест Middle Типы и неопределённое поведение обновлено
Середина двух int64 без переполнения
Условие
Для каждой пары 64-битных знаковых чисел a и b выведите ⌊(a + b) / 2⌋ (округление вниз, к минус бесконечности). Сумма a + b может не поместиться в int64_t, а переполнение знакового в C++ это неопределённое поведение.
Ввод: в первой строке q (1 ≤ q ≤ 700), далее q строк a b (−2⁶³ ≤ a, b ≤ 2⁶³ − 1).
Вывод: q строк с ответами.
Пример 1
Ввод:
4
1 2
-1 -2
9223372036854775807 9223372036854775807
-9223372036854775808 -9223372036854775807
Вывод:
1
-2
9223372036854775807
-9223372036854775808
Пример 2
Ввод:
3
-3 0
5 -6
0 0
Вывод:
-2
-1
0
Как подойти
Подсказки: 2
- Округление вниз и округление к нулю различаются для отрицательных.
- Сдвиг вправо на 1 делит на 2 с округлением вниз.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Ещё по теме «Типы и неопределённое поведение»
- Порядок байтов: перевернуть uint32 и посчитать единицы
- Что C++20 изменил для знаковых целых
- Порядок вычисления аргументов функции
- Объясни, что такое неопределённое поведение
- Продвижение unsigned char
- Размер long на Windows и Linux
- Сопоставьте пример и вид поведения
- Почему проверка x + 1 < x исчезла