Я смотрел на некоторые решения в Google Code Jam, и некоторые люди использовали то, чего я никогда раньше не видел. Например,
2LL*r+1LL
Что означает 2LL и 1LL?
Их включения выглядят так:
#include <math.h>
#include <algorithm>
#define _USE_MATH_DEFINES
или же
#include <cmath>
LL
делает целое число литералом типа long long
,
Так 2LL
, это 2 типа long long
,
Без LL
, литерал будет только типа int
,
Это важно, когда вы делаете такие вещи:
1 << 40
1LL << 40
С буквальным 1
, (при условии int
чтобы быть 32-битным, вы выходите за пределы размера целочисленного типа -> неопределенное поведение).
С 1LL
Вы устанавливаете тип на long long
перед рукой и теперь он вернёт 2 ^ 40.
Других решений пока нет …